十分感谢,自动生成流水账号

Mr.Z 2012-06-19 01:09:03
我的一个表中有字段:

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

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

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

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

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

希望大家给我详细的程序【最好有详细的注释】,本人菜鸟,不想使用存储过程完成这项工作,十分感谢
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
moondreamyou 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
那我插入一条记录的时候怎么让他自动生成流水编号呢?
[/Quote]
当你插入一个流水号时,假设是T20120619001,那么你先根据文件判断出第一个T,然后DateTime.Now.ToString("yyyyMMdd")得到20120619,最后从TB表获取Code值等于T时的Value值(Value值必须先存在,方法之前已说明)。最后把3步操作的字符串拼起来,最后插入到你自己要插入的数据表里面去。
Mr.Z 2012-06-19
  • 打赏
  • 举报
回复
谁有C#web企业信息文档管理系统,给我传一份做一下参考,谢谢


邮箱:zjj570418381@163.com

谢谢
Mr.Z 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

首先固定字段你自己可以上传时判断获取,yyyymmdd直接通过DateTime.Now.ToString("yyyyMMdd")获取,最后3位序列号了。这个序列号必须在数据库中有一个表TB(Code,Value,UpdateTime),Code值用于区分是T,A,还是V,Value用于存序列号,UpdateTime存时间。生成流水号序列号时,判断TB中对应Code值是否存在当天的数据,如果不存在……
[/Quote]
那我插入一条记录的时候怎么让他自动生成流水编号呢?
Mr.Z 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

不用存储过程就用函数去完成
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 (……
[/Quote]

看不懂。。。
孤独加百列 2012-06-19
  • 打赏
  • 举报
回复
不用存储过程就用函数去完成

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
moondreamyou 2012-06-19
  • 打赏
  • 举报
回复
首先固定字段你自己可以上传时判断获取,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拼接之前的字符合成。
Mr.Z 2012-06-19
  • 打赏
  • 举报
回复
我该如何去写他的 规则

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧