IDENTITY_INSERT 设置为 OFF-如何打开它?

我有一个已删除的文件存档数据库,存储的 ID 的文件被删除,我希望管理员能够恢复文件(以及相同的 ID 为链接文件)。我不希望从整个表中删除 Identity _ insert,因为增量1的效果非常好。在我的插入到 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

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

无法为表中的标识列插入显式值 IDENTITY _ INSERT 设置为 OFF 时的“ TBL _ Content”。

有人帮忙吗?

528677 次浏览

我相信它需要在一个查询批处理中完成。基本上,GO 语句将您的命令分成多个批处理,这就导致了问题的产生。改成这样:

SET IDENTITY_INSERT tbl_content ON
/* GO */


...insert command...


SET IDENTITY_INSERT tbl_content OFF
GO

您是否应该设置 Identity _ InsertON,插入记录,然后将其关闭?

像这样:

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

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

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


SET IDENTITY_INSERT tbl_content ON


...insert command...


SET IDENTITY_INSERT tbl_content OFF
GO

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

我的表名为 Genre,其中有3列 IdNameSortOrder

我使用的代码是:

SET IDENTITY_INSERT Genre ON


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

将这一行添加到 Query 之上

SET IDENTITY_INSERT tbl_content ON

提醒一下

SQLServer 只允许一个表将 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

相反:

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

也可以添加抵消

 SET IDENTITY_INSERT Genre ON


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


SET IDENTITY_INSERT Genre  OFF

我有两个不同的表,对于第一个插入可以正常工作,但是对于第二个,抛出了有关 Identity Insert 的异常。 问题是 Table 有一个字段(int)作为未填充的伪造键