2012-09-19 62 views
3

我想知道是否有可能将行重新插入到已在Id列上自动递增的表中。我有一个“未处理”表和一个“已处理”表,“未处理”表具有自动递增功能,当它们被处理时,它们移动到“已处理”表并保留相同的ID。一行可能回到“未处理”行,所以我需要能够再次用相同的“重新插入”该行。为防万一我不清楚,我从问题的定义中知道,Ids之间永远不会有碰撞。将带ID的行插入表中,并自动增量

而且,这是被SQL服务器上完成2008 R2

感谢, 汤姆

回答

4

是的,这是可能的,你只需在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

+0

我没有用国旗去,因为我需要保持未处理表尽可能小的速度。在这些行上将会做很多工作,而且几乎没有任何工作完成。谢谢你的伟大答案! – Tom

+1

您仍然可以使用标志并为未处理的行制作视图。 –

3

是。

set identity_insert YourTable on 
insert YourTable (YourID, OtherField) values (... 
set identity_insert YourTable off