2015-10-17 51 views
0

我已经创建了一个表并将其PK设置为IDENTITY(1,1)。 但我想让PK开始/开始使用字母,例如CRMSON0,CRMSON1,CRMSON2 ...等等。将IDENTITY设置为以字母开头

但我无法找到Microsoft SQL Server的解决方案。 微软网站上,我可以找到关于IDENTITY(种子,增量)或IDENTITY(数据类型,种子,增量)的细节。

任何人都可以建议吗?

+2

你可以做一个主键是一个字符串,但它是没有效率的空间智慧(内存和磁盘)通常。这样做的目的是什么? – UnhandledExcepSean

+1

请问为什么你认为你需要一个字符串PK? –

回答

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

0

最好的解决方案是使用

  • 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而无需IDCrimsonID指定值:

INSERT INTO dbo.YourTable(Col1, Col2, ..., ColN) 
VALUES (Val1, Val2, ....., ValN) 

然后SQL Server将自动并安全地增加你的ID值,而CrimsonID将包含Crimson1,Crimson2,......等等的值 - 自动,安全,可靠,不重复。

这会工作得很好 - 但正如其他人已经指出的那样 - 我会建议使用此列作为集群,主键 - 使用ID列的是,它非常适合这样的任务!该CrimsonID是坏的,主要有两个原因:这是一个可变长度的字符串,它的太宽相比,int