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
我的表被命名为Genre
与Id
, Name
和SortOrder
3列
我使用的代码是:
SET IDENTITY_INSERT Genre ON INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20)
在查询上方添加此行
SET IDENTITY_INSERT tbl_content ON