2013-10-21 142 views
-1

我必須在單個表中維護我公司的採購詳細信息,有三個採購部門涉及採購,他們正在維護自己的'採購訂單SlNo'.. ..創建自動生成ID的最佳做法是什麼

因此,我不能使用自動遞增的號碼,我應該使用像,

X-001 
X-002 

都只能屬於第一部門

Y-001 
Y-002 

所有的b elongs僅第二部門

Z-001 
z-002 

都只能屬於第三部門

任何一個可以建議我,並建議最佳做法是什麼? (使用C#)。

+2

*創建自動生成ID *如果它們是自動生成的,則不需要創建它們。 –

回答

2

最好的解決方案是使用

  • ID INT IDENTITY(1,1)列讓SQL Server處理你的數值的自動增量
  • 計算的,堅持列到數值轉換爲數值你需要

那麼試試這個:

CREATE TABLE dbo.tblCompany 
    (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    CompanyID AS 'X-' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED, 
    .... your other columns here.... 
) 

現在,每次行插入tblCompany沒有指定值IDCompanyID

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

那麼SQL Server將自動,安全地增加ID價值,CompanyID將包含類似X-00001值, X-00002,......等等 - 自動,安全,可靠,無重複。我不知道你在哪裏得到X-Y-等前綴 - 你必須修改這個解決方案(用一個固定的前綴)到你自己的情況(改變前綴),但是基本的解決方案保持不變:讓SQL Server處理自動編號(這是唯一可行的方法),然後使用計算的持久性列添加額外的東西。

+0

* SQL Server將自動安全地增加您的ID值*如果有100000條記錄,會發生什麼情況...... –

+0

@ ta.speot.is:如果您需要支持超過100000行 - 您需要使用多於在'RIGHT'函數中有5個零.... –

+0

我引用了錯誤的部分。 *公司ID將包含像X-00001,X-00002 ......等值 - 自動,安全,可靠,無重複。*示例代碼可能會產生重複。可以改進使用一些從「X-99999」到「X-100000」的算法。但是我一開始就給你+1了,因爲你的回答非常正確。 –

相關問題