我已经创建了一个表并将其PK设置为IDENTITY(1,1)。 但我想让PK开始/开始使用字母,例如CRMSON0,CRMSON1,CRMSON2 ...等等。将IDENTITY设置为以字母开头
但我无法找到Microsoft SQL Server的解决方案。 微软网站上,我可以找到关于IDENTITY(种子,增量)或IDENTITY(数据类型,种子,增量)的细节。
任何人都可以建议吗?
我已经创建了一个表并将其PK设置为IDENTITY(1,1)。 但我想让PK开始/开始使用字母,例如CRMSON0,CRMSON1,CRMSON2 ...等等。将IDENTITY设置为以字母开头
但我无法找到Microsoft SQL Server的解决方案。 微软网站上,我可以找到关于IDENTITY(种子,增量)或IDENTITY(数据类型,种子,增量)的细节。
任何人都可以建议吗?
您可以从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;
最好的解决方案是使用
ID INT IDENTITY(1,1)
列获得SQL服务器来处理自动您的数值那么试试这个值:
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
,......等等的值 - 自动,安全,可靠,不重复。
这会工作得很好 - 但正如其他人已经指出的那样 - 我会不建议使用此列作为集群,主键 - 使用ID
列的是,它非常适合这样的任务!该CrimsonID
是坏的,主要有两个原因:这是一个可变长度的字符串,它的太宽相比,int
你可以做一个主键是一个字符串,但它是没有效率的空间智慧(内存和磁盘)通常。这样做的目的是什么? – UnhandledExcepSean
请问为什么你认为你需要一个字符串PK? –