我创建了一个表并将其PK设置为IDENTITY(1,1)。 但我希望PK以字母开头/开始,例如CRMSON0,CRMSON1,CRMSON2 ......等等。
但我无法找到Microsoft SQL Server的解决方案。 在微软网站上,我能找到的细节是关于IDENTITY(种子,增量)或IDENTITY(数据类型,种子,增量)。
有人可以建议吗?
答案 0 :(得分:2)
您可以创建由CRMSON
+ ID
值组成的计算列:
CREATE TABLE #table1 (ID INT IDENTITY(0,1)
,col INT
,col_pk AS CONCAT('CRMSON', ID) PRIMARY KEY);
INSERT INTO #table1(col) VALUES(3), (4);
SELECT *
FROM #table1;
的 LiveDemo
强>
答案 1 :(得分:0)
最佳解决方案是使用
ID INT IDENTITY(1,1)
列,以使SQL Server处理数值的自动增量所以试试这个:
CREATE TABLE dbo.YourTable
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
CrimsonID AS 'CRIMSON' + CAST(ID AS VARCHAR(10) PERSISTED,
.... your other columns here....
)
现在,每次在YourTable
中插入一行而未指定ID
或CrimsonID
的值时:
INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
然后SQL Server将自动且安全地增加ID
值,而CrimsonID
将包含Crimson1
,Crimson2
等值。 ....等等 - 自动,安全,可靠,无重复。
这样做会很好 - 但正如其他人已经指出的那样 - 我会不建议将此列用作群集主键 - 使用{{1为此专栏,它非常适合这样的任务! ID
主要有两个原因:它是一个可变长度的字符串,与CrimsonID
相比,太宽