日期:2014-05-18  浏览次数:20475 次

十分感谢,自动生成流水账号
我的一个表中有字段:

id【int 自动增加】
file_id【。。。】

  希望file_id能够自动生成 流水号,例如 Tyyyymmdd×××

T:固定字段 表示文本文件
A:固定字段 表示音频文件
V:固定字段 表示视频文件

yyyy表示年 mm表示月 dd表示日

×××:表示编号每天都从001 开始递增,这个递增和TAV没有关系,
  比如今天第一个文件是文本文件,则标号是 T20120619001
  今天第二个文件是音频文件,则标号是 A20120619002
  今天第三个文件是视频文件,则标号是 V20120619003

希望大家给我详细的程序【最好有详细的注释】,本人菜鸟,不想使用存储过程完成这项工作,十分感谢

------解决方案--------------------
首先固定字段你自己可以上传时判断获取,yyyymmdd直接通过DateTime.Now.ToString("yyyyMMdd")获取,最后3位序列号了。这个序列号必须在数据库中有一个表TB(Code,Value,UpdateTime),Code值用于区分是T,A,还是V,Value用于存序列号,UpdateTime存时间。生成流水号序列号时,判断TB中对应Code值是否存在当天的数据,如果不存在,把Value更新成001,UpdateTime更新成当天,然后获取该Value拼接之前的字符合成;如果存在,则把Value更新成Value+1,然后获取该Value拼接之前的字符合成。
------解决方案--------------------
不用存储过程就用函数去完成
SQL code

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
    DROP TABLE tba
END
GO
CREATE TABLE tba
(
    ID INT IDENTITY(1,1),
    Fileid VARCHAR(100)
)
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'createid')
BEGIN
    DROP FUNCTION CreateID
END
GO
CREATE FUNCTION CREATEID(@Type VARCHAR(10))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @FileID VARCHAR(100)
DECLARE @Num INT

SELECT @Num = ISNULL(COUNT(1),0) FROM tba WHERE CHARINDEX(@Type,FileID) > 0 AND CHARINDEX(CONVERT(VARCHAR(8),GETDATE(),112),Fileid) > 0

SET @Num = @Num + 1

SET @FileID = @Type + CONVERT(VARCHAR(8),GETDATE(),112) + REPLICATE('0',3 - LEN(RTRIM(@Num))) + RTRIM(@Num)

RETURN @FileID
END
GO

INSERT INTO tba
SELECT dbo.CREATEID('T') UNION ALL
SELECT dbo.CREATEID('A') UNION ALL
SELECT dbo.CREATEID('V') UNION ALL
SELECT dbo.CREATEID('T') UNION ALL
SELECT dbo.CREATEID('T') 

SELECT * FROM tba

ID    Fileid
1    T20120619001
2    A20120619001
3    V20120619001
4    T20120619002
5    T20120619003

------解决方案--------------------
探讨
那我插入一条记录的时候怎么让他自动生成流水编号呢?