我想知道是否可以将一行“重新插入”到Id列上自动递增的表中。我有一个“未处理”表和一个“已处理”表,“未处理”表有自动增量,当它们被处理时,它们移动到“已处理”表并保持相同的ID。一行可能会移回“未处理”,因此我需要能够再次使用相同的ID“重新插入”此行。为了防止我不清楚,我从问题的定义中知道Ids之间永远不会发生碰撞。
此外,这是在SQL Server 2008 R2上完成的
谢谢, 汤姆
答案 0 :(得分:4)
是
set identity_insert YourTable on
insert YourTable (YourID, OtherField) values ( ...
set identity_insert YourTable off
答案 1 :(得分:4)
是的,这是可能的,您只需在INSERT语句中提供具有所需值的ID列,并首先为所需的表启用“set identity_insert”(然后为安全性禁用它)
这就是这个(伪代码):
INSERT #1 --created id 1
INSERT #2 --created 2
INSERT #3 -- created 3
DELETE 2 --2 gone, leaves a gap
set identity_insert your_table on
INSERT VALUES ( 2, ... ) -- filled gap again
set identity_insert your_table off
无论如何,我建议在一张桌子上使用一个标志,如果没有任何说话的话。
所以你可以简单地翻转旗帜,你将永远不必挣扎/确保你的ids