记录一些经验

学习,生活

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL流水帐号的生成

Posted on 2008-03-10 17:15 古道飘零客 阅读(84) 评论(2)  编辑 收藏 所属分类: SQL2000/SQL2005
 1 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
 2 --得到新编号的函数
 3 CREATE FUNCTION f_NextBH()
 4 RETURNS char(8)
 5 AS
 6 BEGIN
 7     RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6FROM tb WITH(XLOCK,PAGLOCK))
 8 END
 9 GO
10 
11 --在表中应用函数
12 CREATE TABLE tb(
13 BH char(8PRIMARY KEY DEFAULT dbo.f_NextBH(),
14 col int)
15 
16 --插入资料
17 BEGIN TRAN
18     INSERT tb(col) VALUES(1)
19     INSERT tb(col) VALUES(2)
20     INSERT tb(col) VALUES(3)
21     DELETE tb WHERE col=3
22     INSERT tb(col) VALUES(4)
23     INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
24 COMMIT TRAN
25 
26 --显示结果
27 SELECT * FROM tb
28 /*--结果
29 BH         col 
30 ---------------- ----------- 
31 BH000001  1
32 BH000002  2
33 BH000003  4
34 BH000004  14
35 --*/

Feedback

#1楼 123.253.128.*   回复  引用  查看    

2008-03-10 17:29 by webqsoft [未注册用户]
怎么防治重号呢

#2楼    回复  引用  查看    

2008-03-10 17:31 by Howard Queen
还没用纯sql编过程,不知道算不算遗憾:)

2008-4-16修改添加
SELECT 'TYKJ/QC_' + CONVERT(VARCHAR(4), GETDATE(), 20)
      + '_' + RIGHT(10001 + ISNULL(RIGHT(MAX(id), 4), 0), 4) AS Expr1
FROM tb_YiShengJi WITH (XLOCK, PAGLOCK)
WHERE (CONVERT(VARCHAR(4), 录入日期, 20) = CONVERT(VARCHAR(4), GETDATE(), 20))
posted on 2008-03-11 20:53  将飞  阅读(880)  评论(0)    收藏  举报