2015-10-17 64 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