我想知道是否有可能将行重新插入到已在Id列上自动递增的表中。我有一个“未处理”表和一个“已处理”表,“未处理”表具有自动递增功能,当它们被处理时,它们移动到“已处理”表并保留相同的ID。一行可能回到“未处理”行,所以我需要能够再次用相同的“重新插入”该行。为防万一我不清楚,我从问题的定义中知道,Ids之间永远不会有碰撞。将带ID的行插入表中,并自动增量
而且,这是被SQL服务器上完成2008 R2
感谢, 汤姆
我想知道是否有可能将行重新插入到已在Id列上自动递增的表中。我有一个“未处理”表和一个“已处理”表,“未处理”表具有自动递增功能,当它们被处理时,它们移动到“已处理”表并保留相同的ID。一行可能回到“未处理”行,所以我需要能够再次用相同的“重新插入”该行。为防万一我不清楚,我从问题的定义中知道,Ids之间永远不会有碰撞。将带ID的行插入表中,并自动增量
而且,这是被SQL服务器上完成2008 R2
感谢, 汤姆
是的,这是可能的,你只需在INSERT语句中提供与期望的值ID列,并启用“SET IDENTITY_INSERT”首先对于所需的表(事后禁用它的Safty)
这几乎这(伪代码):
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
是。
set identity_insert YourTable on
insert YourTable (YourID, OtherField) values (...
set identity_insert YourTable off
我没有用国旗去,因为我需要保持未处理表尽可能小的速度。在这些行上将会做很多工作,而且几乎没有任何工作完成。谢谢你的伟大答案! – Tom
您仍然可以使用标志并为未处理的行制作视图。 –