IDENTITY_INSERT设置为OFF - 如何将其打开?

Spo*_*oks 106 sql t-sql sql-server

我有一个已删除的文件存档数据库,它存储了已删除文件的ID,我希望管理员能够恢复该文件(以及链接文件的相同ID).我不想将identity_insert从整个表中删除,因为一个增量很有效.在我的插入TBL_Content存储过程中,我有类似的东西

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
...insert command...
SET IDENTITY_INSERT tbl_content OFF
Run Code Online (Sandbox Code Playgroud)

但我一直得到同样的错误:

当IDENTITY_INSERT设置为OFF时,无法在表'TBL_Content'中为标识列插入显式值.

有帮助吗?

Dav*_*vid 164

您是否应该在存储过程中将标识插入设置为on?看起来您只在更改存储过程时将其设置为on,而不是在实际调用它时.尝试:

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 

SET IDENTITY_INSERT tbl_content ON

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO
Run Code Online (Sandbox Code Playgroud)


Abe*_*ler 16

你不应该设置identity_Insert ON,插入记录然后关闭它吗?

像这样:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
SET IDENTITY_INSERT tbl_content ON
...insert command...
SET IDENTITY_INSERT tbl_content OFF
Run Code Online (Sandbox Code Playgroud)


DCN*_*YAM 14

我相信它需要在一个查询批处理中完成.基本上,GO语句将您的命令分成多个批次并导致问题.把它改成这个:

SET IDENTITY_INSERT tbl_content ON
/* GO */

...insert command...

SET IDENTITY_INSERT tbl_content OFF
GO
Run Code Online (Sandbox Code Playgroud)


Edu*_*Edu 9

提醒

SQL Server仅允许一个表将IDENTITY_INSERT属性设置为ON.

这不起作用:

SET IDENTITY_INSERT TableA ON
SET IDENTITY_INSERT TableB ON
... INSERT ON TableA ...
... INSERT ON TableB ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB OFF
Run Code Online (Sandbox Code Playgroud)

代替:

SET IDENTITY_INSERT TableA ON
... INSERT ON TableA ...
SET IDENTITY_INSERT TableA OFF
SET IDENTITY_INSERT TableB ON
... INSERT ON TableB ...
SET IDENTITY_INSERT TableB OFF
Run Code Online (Sandbox Code Playgroud)


小智 6

在您的查询上方添加此行

SET IDENTITY_INSERT tbl_content ON
Run Code Online (Sandbox Code Playgroud)


Doe*_*ats 5

参考:http: //technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx

我的表名为Genre3列Id,NameSortOrder

我使用的代码如下:

SET IDENTITY_INSERT Genre ON

INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 
Run Code Online (Sandbox Code Playgroud)


Nar*_*chu 5

添加衬托也

 SET IDENTITY_INSERT Genre ON

    INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 

    SET IDENTITY_INSERT Genre  OFF
Run Code Online (Sandbox Code Playgroud)