2013-04-25 70 views
1

我有一個表生成SQL Server中唯一的字符串2012

CREATE TABLE #Agency 
(
    AgencyID int PRimary KEY IDENTITY(1,1), 
    AgencyName varchar(100), 
    AgencyCode varchar(50) 
) 

我要生成一個獨特的機構代碼,同時插入到表...機構應的代碼只包含字母,數字..no或特殊的人物

謝謝

+0

是否有必要避免數字或特殊字符?如果這是可以接受的,你可以使用NEWID()函數爲你生成一個GUID。詳情在這裏:http://www.dailycoding.com/Posts/generate_new_guid_uniqueidentifier_in_sql_server.aspx – havardhu 2013-04-25 10:41:21

+0

這聽起來像你正在數據庫中生成一個自然的關鍵。後來可能會變成一堆蠕蟲。 – 2013-04-25 11:26:16

+0

是的..我知道GUID選項..但它只是強制性的只採用字母.. – SQL006 2013-04-25 11:52:57

回答

3

你可以做您鑄造ID爲varchar,並用字母(或組合)代替每個數字這樣簡單的事情。

1 = A,2 = B,等等。

所以,只要你的ID是唯一的,所以將代碼是。

片段可能是這樣的:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    CAST(AgencyID AS VARCHAR(50)) 
    ,'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J') 

如果你想插入過程中做到這一點,你可以使用IDENT_CURRENT(「表名」)來獲取插入身份列的值。

 INSERT INTO Agency (AgencyName, AgencyCode) 
    SELECT 'Name001', 
       REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
       CAST(IDENT_CURRENT('Agency') AS VARCHAR(50)) 
       ,'1','A'),'2','B'),'3','C'),'4','D'),'5','E'),'6','F'),'7','G'),'8','H'),'9','I'),'0','J') 

; 

SQLFiddle DEMO

創建可轉換您的號碼串和/或計算列可能是用漂亮的功能。

DEMO using function and computed columns

編輯:

DEMO with updated request to make at least 5 string long character

+0

我的答案是對問題的一種替代看法,但你直接回答,所以+1。 – usr 2013-04-25 11:02:02

+0

謝謝你的回答..但是代碼應該有至少5個字符 – SQL006 2013-04-25 12:07:51

+0

@ SQL006你可以在返回之前添加額外的邏輯來創建代碼。也許如果它少於5個字符,在前面添加幾個X字母。檢查編輯後的新演示。 – 2013-04-25 12:10:30

1

我建議你生成的應用程序的字符串。這樣,您可以使用比T-SQL更適合程序代碼的語言。無論如何,如果可能的話,保持邏輯脫離SQL Server是最佳實踐。

相關問題