2009-06-26 70 views
24

我有一个强制自动增量列的表,这个列是一个非常有价值的ID,通过整个应用程序保留。很抱歉,我认为这是自动递增列,这是糟糕的发展。SQL-如何插入行而不自动递增ID列?

所以,这是问题所在。我必须在表中插入一个已经创建并从表中删除的列的ID。有点像复活这个ID并把它放回桌子。

那么如何在不关闭列增量的情况下以编程方式执行此操作。纠正我,如果我错了,如果我以编程方式关闭它,它将重新启动在0或1,我不希望发生这种情况...

+0

您正在使用哪种RDBMS?对于这个问题... – Quassnoi 2009-06-26 15:07:59

+0

MS-SQL服务器是正确的...你有它向后 – 2009-06-26 15:48:58

回答

58

如果您在Microsoft SQL Server中,您可以“关闭“通过发出声明Set Identity_Insert [TableName] On,如自动增量功能:

Set Identity_Insert [TableName] On 
    -- -------------------------------------------- 
    Insert TableName (pkCol, [OtherColumns]) 
    Values(pkValue, [OtherValues]) 
    -- ---- Don't forget to turn it back off ------ 
    Set Identity_Insert [TableName] Off 
7

除了查尔斯的答案(也就是现在的100%正确的:-)并保留在表中的IDENTITY的当前值),您可能还想检查桌上的IDENTITY的当前值 - 您可以在此处使用此命令执行此操作:

DBCC CHECKIDENT('YourTableName') 

如果你需要真正变化它,你可以在这里使用此命令这样做:

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY)) 
3

其实,上面INDENTITY_INSERT的代码是正确的 - 打开它会告诉你希望服务器自己插入值。它允许您将值插入IDENTITY列。然后,您需要在完成后关闭它(允许服务器生成并插入值)。