将IDENTITY设置为以字母表开头

时间:2015-10-17 00:27:01

标签: sql sql-server database

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

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

有人可以建议吗?

2 个答案:

答案 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中插入一行而未指定IDCrimsonID的值时:

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

然后SQL Server将自动且安全地增加ID值,而CrimsonID将包含Crimson1Crimson2等值。 ....等等 - 自动,安全,可靠,无重复。

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