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)
提醒
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)
参考:http: //technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx
我的表名为Genre3列Id,Name和SortOrder
我使用的代码如下:
SET IDENTITY_INSERT Genre ON
INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20)
Run Code Online (Sandbox Code Playgroud)
添加衬托也
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)