SQL Server通用流水号生成存储过程
代码
1 DROP PROCEDURE PRO_AutoLSH
2 GO
3 CREATE PROCEDURE PRO_AutoLSH
4 (
5 @letter varchar(10), --首字母,可以多个字母
6 @LSHkey varchar(20), --表中的流水号列名,最好是主键
7 @tablename varchar(20) --表名
8 )
9 AS
10 begin
11 DECLARE @LSHID NVARCHAR(20)
12 DECLARE @TLSH VARCHAR(20)
13 DECLARE @NUM INT
14 DECLARE @sql NVARCHAR(200)
15 ----查询该表最大的流水号
16 SET @sql='SELECT ISNULL(MAX(CONVERT(INT,SUBSTRING('+@LSHkey+',8,4))),0)+1 FROM '+@tablename
17 --创建临时表
18 CREATE TABLE TEMP1(TOTAL INT);
19 --写入查询得到的数据
20 INSERT INTO TEMP1 EXEC(@sql);
21 --再查询出值
22 SET @NUM=(SELECT TOTAL FROM TEMP1)
23 DROP TABLE TEMP1
24 --拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001)
25 SET @TLSH=@letter+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4)
26 SET @sql=''
27 SET @sql='SELECT @LSH='+''''+@TLSH+''''+' FROM '+@tablename
28
29 EXEC sp_executesql @sql,N'@LSH NVARCHAR(20) OUTPUT',@LSHID OUTPUT SELECT @LSHID
30 end