SqlServer自定义存储日期自增长序列生成

ALTER PROCEDURE get_vip_archives_idcode

AS
/*
CREATE TABLE [dbo].[idcode_vip_archives] (
[code] varchar(200) COLLATE Chinese_PRC_CI_AS NULL ,
[ctime] datetime NULL DEFAULT (getdate()) ,
[cid] bigint NOT NULL IDENTITY(1,1) ,
CONSTRAINT [PK__idcode_v__D837D05F12765016] PRIMARY KEY ([cid])
)
exec  get_vip_archives_idcode 
*/
BEGIN
DECLARE @DATE DATETIME

DECLARE @YYYY VARCHAR(4)
DECLARE @MM VARCHAR(2)
DECLARE @DD VARCHAR(2)
DECLARE @D1 VARCHAR(2)
DECLARE @D2 VARCHAR(2)
DECLARE @D3 VARCHAR(2)
DECLARE @NEW_ID VARCHAR(200)
--保存取得的当前时间

SET @DATE = GETDATE()
SET @YYYY = DATEPART(yyyy, @DATE)
SET @MM = DATEPART(mm, @DATE)
SET @DD = DATEPART(dd, @DATE)
SET @D1 = DATEPART(hh, @DATE)
SET @D2 = DATEPART(mm, @DATE)
SET @D3 = DATEPART(ss, @DATE)
-- 年月日时分秒单独处理
--位数不够的前面补0
--SET @YYYY = REPLICATE('0', 4 - LEN(@YYYY)) + @YYYY
SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM
SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD
SET @D1 = REPLICATE('0', 2 - LEN(@D1)) + @D1
SET @D2 = REPLICATE('0', 2 - LEN(@D2)) + @D2
SET @D3 = REPLICATE('0', 2 - LEN(@D3)) + @D3
--取出表中当前日期的已有的最大ID
SET @NEW_ID = NULL
SELECT TOP 1 @NEW_ID = [code] FROM [idcode_vip_archives] WHERE [code] LIKE
--@YYYY+@MM+@DD+@D1+@D2+@D3+'%' ORDER BY [code] DESC
@YYYY+@MM+@DD+ @D1+'%' ORDER BY [code] DESC
--如果未取出来
IF @NEW_ID IS NULL
--说明还没有当前日期的编号,则直接从1开始编号
--SET @NEW_ID = (@YYYY+@MM+@DD+@D1+@D2+@D3+'00000001')
SET @NEW_ID = (@YYYY+@MM+@DD+ @D1+'00000001')
--如果取出来了
ELSE
BEGIN
DECLARE @NUM VARCHAR(8)
--取出最大的编号加上1

SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 8)) + 1))
--因为经过类型转换,丢失了高位的0,需要补上
SET @NUM = REPLICATE('0', 8 - LEN(@NUM)) + @NUM
--最后返回日期加编号

--SET @NEW_ID = @YYYY+@MM+@DD+@D1+@D2+@D3 + @NUM 
SET @NEW_ID = @YYYY+@MM+@DD+ @D1 + @NUM 

END
INSERT INTO idcode_vip_archives	(code) VALUES (@NEW_ID)
DELETE FROM idcode_vip_archives WHERE code NOT IN (SELECT TOP 5 code FROM idcode_vip_archives ORDER BY code DESC )
-- 返回编码
SELECT 'VP'+@NEW_ID recordsCode
END
发布了20 篇原创文章 · 获赞 1 · 访问量 500

猜你喜欢

转载自blog.csdn.net/sunny_day_day/article/details/105296782