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

我有一个已删除的文件存档数据库,存储已被删除的文件的ID,我希望pipe理员能够恢复该文件(以及相同的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 

但是我一直得到相同的错误:

当IDENTITY_INSERT设置为OFF时,不能在表'TBL_Content'中插入标识列的显式值。

任何帮助?

你应该将存储过程中的身份插入设置为? 它看起来像只是在更改存储过程时设置它,而不是实际调用时。 尝试:

 ALTER procedure [dbo].[spInsertDeletedIntoTBLContent] @ContentID int, SET IDENTITY_INSERT tbl_content ON ...insert command... SET IDENTITY_INSERT tbl_content OFF GO 

你不应该设置identity_Insert ON,插入logging,然后把它关掉吗?

喜欢这个:

 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 

我相信它需要在一个查询批处理中完成。 基本上,GO语句将您的命令分成多个批次,这就是问题所在。 将其更改为:

 SET IDENTITY_INSERT tbl_content ON /* GO */ ...insert command... SET IDENTITY_INSERT tbl_content OFF GO 

提醒

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 

代替:

 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 

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

我的表被命名为GenreIdNameSortOrder 3列

我使用的代码是:

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

在查询上方添加此行

 SET IDENTITY_INSERT tbl_content ON