我想要连续的数字序列作为主键。但出于某些原因,我不想使用Identity Seed或Sequence。
以下是我的代码
Insert Into Items (ItemId, ItemName)
Values((Select MAX(ItemId)+1 from Items), 'Some Name')
当表中有一些行时,这可以正常工作。但是当表 Items 中没有任何行时,MAX(itemId)给出NULL。
我希望MAX(itemId)在没有任何行时给出0。
答案 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
返回第二个参数。