我想在sql表中创建包含以下信息的自定义ID
ID ='SRIG'+'DDMMYY'+ 5位数字。
表格详情
CREATE TABLE SR
(
SRREQID NVARCHAR(100) PRIMARY KEY,
-- Your @Entity ID might be another candidate here
SRID INT
);
SQL查询
DECLARE @EntityId INT;
DECLARE @SRREQID NVARCHAR(100);
-- BEGIN TRAN
SELECT @EntityId = ISNULL(MAX(SRID),0) FROM SR;
Select @SRREQID = 'SRIC'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)+
RIGHT('000000'+ CONVERT(NVARCHAR(10), @EntityId+1),6);
INSERT INTO SR(SRREQID,SRID) VALUES(@SRREQID,@EntityId+1);
SELECT * FROM SR;
-- COMMIT TRAN;
查询输出
SRREQID SRID
SRIC160518000100 100
答案 0 :(得分:2)
您也可以使用计算列,如下所示:
create table SR
(SRREQID AS -- Your computed column
'SRIC'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)+
RIGHT('00000'+ CONVERT(NVARCHAR(10), SRREQID_SEQ),5)
, SRREQID_SEQ INT IDENTITY(1,1) -- ID used by your computed column
, MyRandomVal varchar(25)) -- Random actual data for the table
然后,创建一个作业,在每天开始时,在00.00执行以下命令,以便在第二天将SRREQID_SEQ的身份重新设置为1。
DBCC CHECKIDENT ('dbo.SR', RESEED, 0);
可能有一种更聪明的方法可以解决这个问题,但实际上我还没有遇到过类似这样的事情会有用的情况。
所有这一切的好处是您不需要复杂的脚本来插入新数据。
您只需正常插入数据,数据库就会自动为您处理SRREQID。像这样:
INSERT SR (MyRandomVal) VALUES ('My data')
编辑:另外,我建议您查看下面的Zohar Peled评论,他建议可以进一步简化此解决方案,并根据您的情况和数据库负载和使用情况,可能比我上面的建议更适合你的情景。
答案 1 :(得分:1)
适用于SQL Server 2012及更高版本。
首先创建一个SEQUENSE:
CREATE SEQUENCE dbo.testing
START WITH 1
INCREMENT BY 1 ;
GO
然后你可以运行它来获得新的id:
SELECT 'SRIG' + REPLACE(CONVERT(nvarchar(10),GETDATE(),4),'.','') +
RIGHT('0000'+CAST(NEXT VALUE FOR dbo.testing as nvarchar(5)),5)
输出:
SRIG18051600001
修改强>
如果您需要每天重新启动序列,请使用此查询:
ALTER SEQUENCE dbo.testing RESTART WITH 1;