您好,oracle数据库的话可以利用rownum取当前记录的顺序,然后赋值给流水号就可以了。
sqlserver可就没什么好办法了,只能alter table xxx add id nvarchar(10) indentity(1,1)了,然后再将id赋值流水号。
---定义当前的流水号,可以从数据库中获取,此处为测试值
DECLARE @CURR_LSH VARCHAR(7)
---新流水号
DECLARE @LSH VARCHAR(7)
---旧流水号第5位
DECLARE @FIRSTCHAR VARCHAR(1)
---旧流水号最后2位的数值
DECLARE @LASTCHAR2 INT
---旧流水号第5位的asc码
DECLARE @FIRSTCHARASCII INT
---新的后3位流水号
DECLARE @LASTCHAR3NEW VARCHAR(3)
---测试的旧流水号
SET @CURR_LSH = 'B307Z98'
---定义当前年份最后1位和两位的月份
DECLARE @YEAR VARCHAR(1)
DECLARE @MONTH VARCHAR(2)
SET @YEAR = SUBSTRING(CONVERT(VARCHAR,DATEPART(YEAR,GETDATE())),4,1)
SET @MONTH = RIGHT('0' + CONVERT(VARCHAR,DATEPART(MONTH,GETDATE())), 2)
SET @FIRSTCHAR = SUBSTRING(@CURR_LSH, 5,1)
SET @FIRSTCHARASCII = ASCII(@FIRSTCHAR)
---@FIRSTCHARASCII 48-57表示0-9,65-90表示A-Z
SET @LASTCHAR2 = CONVERT(INT,SUBSTRING(@CURR_LSH,6,2))
IF @LASTCHAR2 <99
BEGIN
SET @LASTCHAR3NEW = @FIRSTCHAR + RIGHT('00' + CONVERT(VARCHAR, @LASTCHAR2 + 1),2)
END
ELSE
BEGIN
IF @FIRSTCHARASCII < 57
SET @LASTCHAR3NEW = CONVERT(VARCHAR, CONVERT(INT,@FIRSTCHAR + '00') + CONVERT(INT, RIGHT('00' + CONVERT(VARCHAR, @LASTCHAR2 + 1),3)))
ELSE IF @FIRSTCHARASCII = 57
SET @LASTCHAR3NEW = 'A00'
ELSE
SET @LASTCHAR3NEW = CHAR(@FIRSTCHARASCII + 1) + '00'
END
---输出你需要的新流水号
SET @LSH = 'B' + @YEAR + @MONTH + @LASTCHAR3NEW
---打印出来
温馨提示:答案为网友推荐,仅供参考