我已經創建了一個表並將其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? –