Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何在不自动递增ID列的情况下插入行?_Sql_Sql Server_Auto Increment - Fatal编程技术网

SQL如何在不自动递增ID列的情况下插入行?

SQL如何在不自动递增ID列的情况下插入行?,sql,sql-server,auto-increment,Sql,Sql Server,Auto Increment,我有一个表,它有一个强制自动递增列,这个列是一个非常有价值的ID,在整个应用程序中都会保留。很抱歉,这是一个糟糕的发展,对我来说,这是自动递增列 所以,问题出在这里。我必须在此表中插入已创建并从表中删除的列的ID。有点像复活这个ID然后把它放回桌子上 那么,我如何在不关闭列增量的情况下通过编程实现这一点呢。如果我错了,请纠正我,如果我以编程方式将其关闭,它将在0或1处重新启动,我不希望发生这种情况…如果您在Microsoft SQL Server中,您可以通过在上发出语句Set Identity

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

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


那么,我如何在不关闭列增量的情况下通过编程实现这一点呢。如果我错了,请纠正我,如果我以编程方式将其关闭,它将在0或1处重新启动,我不希望发生这种情况…

如果您在Microsoft SQL Server中,您可以通过在上发出语句
Set Identity\u Insert[TableName]来“关闭”自动递增功能,如下所示:

  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

除了Charles的答案(现在100%正确:-)和保留表上标识的当前值外,您可能还希望检查表上标识的当前值-您可以使用以下命令执行此操作:

DBCC CHECKIDENT('YourTableName')
DBCC CHECKIDENT ('YourTableName', RESEED, (new value for IDENTITY) )
如果您需要实际更改它,您可以在此处使用以下命令:

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

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

它是否保留递增标识的最后一个数字?我不想让它自己重置整个标识列,@Scott,是的,它“保留”了旧值。。。i、 例如,此参数不影响下一个自动增量标识使用的“当前”值t obe…我知道这是一个旧线程,但在SSMS 2012中,它没有保留旧值。我按照上面的例子,插入了一个999999的id,关闭了identity_insert“OFF”,插入了一条新记录,它给了我1000000,而不是下一个应该是72597的数字。我正在进一步研究这个问题。只有当插入的值小于旧值时,它才会“保留”旧值。。。我(错误地)假设这样做的目的是插入一个带有以前使用但已删除的旧值的值,需要重新插入。请注意,对于此问题,您只需在query.MS-SQL server的SELECT子句中显式列……请解释此答案解决问题的原因。阅读
bulk insert tablename from 'C:\test.csv' with (rowterminator = '\n',fieldterminator = ',',KEEPIDENTITY)