我有一个Transaction
表,该表中没有任何ID列。我必须以"0901201900001"
的形式生成一个唯一值。
以上格式是今天的日期和值00001的组合。
00001-仅当日自动增加的值。第二天应该再次从00001开始。
输出应该像这样
0901201900001
0901201900002
0901201900003
.
.
.
09012019000050
1001201900001
.
.
.
10012019000050
答案 0 :(得分:1)
我同意@Sean Lange的话,这太过分了。将日期和生成的数字组合起来会获取两段数据(日期和替代键),并将它们变成一列。您将始终要解析数据是什么,并试图弄清楚日期是什么。相反,您想将密钥设为日期和序列ID。
话虽如此,您可以采取以下措施来解决您的原始问题。
CREATE SEQUENCE dbo.SQ_RestartableSequence AS INT INCREMENT BY 1 START WITH 1 CYCLE
-- Run this every day right before midnight. Gross, but it's the only way to get what you want
ALTER SEQUENCE dbo.SQ_RestartableSequence RESTART WITH 1
CREATE TABLE SequenceTest
( ID VARCHAR(30) DEFAULT REPLACE(CONVERT(VARCHAR(30), CAST(SYSDATETIME() AS DATE), 1), '/', '') + RIGHT( '0000' + CAST(NEXT VALUE FOR SQ_RestartableSequence AS VARCHAR(30)), 4)
, ValueField Varchar(30)
)
INSERT INTO dbo.SequenceTest
(ValueField)
VALUES
( 'Test Value')
INSERT INTO dbo.SequenceTest
(ValueField)
VALUES
( 'Test Value2')
SELECT *
FROM dbo.SequenceTest AS st