需要为表和表的varchar列分配自动增量值,而无需在I'd列中用作自动增量

时间:2019-01-09 17:31:54

标签: sql sql-server tsql

我有一个Transaction表,该表中没有任何ID列。我必须以"0901201900001"的形式生成一个唯一值。

以上格式是今天的日期和值00001的组合。

00001-仅当日自动增加的值。第二天应该再次从00001开始。

输出应该像这样

0901201900001
0901201900002
0901201900003
.
.
.
09012019000050
1001201900001
.
.
.
10012019000050

1 个答案:

答案 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
相关问题