SQL - 没有Identity种子或序列的主键自动增量

时间:2015-04-02 18:05:04

标签: sql-server

我想要连续的数字序列作为主键。但出于某些原因,我不想使用Identity Seed或Sequence。

以下是我的代码

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

当表中有一些行时,这可以正常工作。但是当表 Items 中没有任何行时,MAX(itemId)给出NULL。

我希望MAX(itemId)在没有任何行时给出0。

1 个答案:

答案 0 :(得分: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返回其第一个非NULL参数。如果第一个参数为NULL,则ISNULL返回第二个参数。