31

我有一个表,它有一个强制自动递增列,这个列是一个非常有价值的 ID,在整个应用程序中都保留了下来。很抱歉,将它作为自动递增列对我来说是一个糟糕的发展。

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

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

4

4 回答 4

79

如果您在 Microsoft SQL Server 中,您可以通过发出 statement 来“关闭”自动增量功能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
于 2009-06-26T15:11:39.077 回答
9

除了查尔斯的回答(现在 100% 正确 :-) 并且保留了表上 IDENTITY 的当前值)之外,您可能还想检查表上 IDENTITY 的当前值 - 你可以这样做在这里使用此命令:

DBCC CHECKIDENT('YourTableName')

如果您需要实际更改它,可以在此处使用以下命令:

DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
于 2009-06-26T16:10:08.447 回答
6

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

于 2014-11-11T17:12:58.310 回答
-1
bulk insert tablename from 'C:\test.csv' with (rowterminator = '\n',fieldterminator = ',',KEEPIDENTITY)
于 2019-03-30T10:39:41.160 回答