954
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE [dbo].[GETSID]
(
@table varchar(20),
@letter varchar(20),
@pkey varchar(20),
@newid nvarchar(14) output
)
AS
BEGIN
DECLARE @DATE DATETIME
DECLARE @YYYY VARCHAR(4)
DECLARE @MM VARCHAR(2)
DECLARE @DD VARCHAR(2)
DECLARE @sql NVARCHAR(200)
DECLARE @oldid VARCHAR(14)
--获取当前日期
SET @DATE=GETDATE()
SET @YYYY=DATEPART(YYYY,@DATE)
SET @MM=DATEPART(MM,@DATE)
SET @DD=DATEPART(DD,@DATE)
--位数不够补零
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 @sql='select top 1 @oldid=['+@pkey+'] from '+@table+' where '+@pkey+
' like '''+@letter+@YYYY+@MM+@DD+'%'' Order by CONVERT(int,RIGHT('+@pkey+',4)) desc'
EXEC SYS.sp_executesql @sql,N'@oldid nvarchar(16) OUT',@oldid OUT
--select top 1 @oldid=[id] from test where [id] like @letter+@YYYY+@MM+@DD+'%' order by convert(int,right(id,4)) desc
--如果@oldid为空
IF @oldid IS NULL
set @newid=(@letter+@YYYY+@MM+@DD+'0001')
ELSE
BEGIN
DECLARE @NUM VARCHAR(4)
SET @NUM=CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@oldid,4))+ 1))
SET @NUM=REPLICATE('0',4-LEN(@NUM))+@NUM
--生成编号
SET @newid=@letter+@YYYY+@MM+@DD+@NUM
END
END