2015-04-02 34 views
-1

我想要連續的數字序列作爲主鍵。但由於某些原因,我不想使用Identity Seed或Sequence。SQL - 沒有標識種子或序列的主鍵自動增量

以下是我的代碼

Insert Into Items (ItemId, ItemName) 
Values((Select MAX(ItemId)+1 from Items), 'Some Name') 

當該表中的某些行這工作得很好。但是,當表項目中沒有任何行時,MAX(itemId)給出NULL。

我希望MAX(itemId)在沒有任何行時給出0。

+0

你也可以用計算列或觸發器來處理這個問題。 – 2015-04-02 18:11:43

+0

@TabAlleman這會使問題進一步複雜化,因爲我在C#應用程序中使用此數據庫 – 2015-04-02 18:23:53

+0

爲什麼你不想使用什麼工作?任何時候你試圖推出你自己的標識類型的列,你都會遇到併發問題。一個身份是完全適合這種類型的事情。 – 2015-04-02 18:43:16

回答

2

的這兩種方式要麼將工作:

Insert Into Items (ItemId, ItemName) 
Values(COALESCE((Select MAX(ItemId)+1 from Items), 0), 'Some Name') 

Insert Into Items (ItemId, ItemName) 
Values(ISNULL((Select MAX(ItemId)+1 from Items), 0), 'Some Name') 

COALESCE返回它的第一個非空參數。 ISNULL如果第一個參數爲NULL,則返回第二個參數。

+1

這主要是有效的,但併發性對於這種類型的代碼是一個真正的問題。 – 2015-04-02 18:43:48