Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 R2上的SET IDENTITY\u INSERT出现奇怪错误(Msg 8107)_Sql Server_Sql Server 2008_Tsql_Sql Server 2008 R2_Runtime Error - Fatal编程技术网

Sql server SQL Server 2008 R2上的SET IDENTITY\u INSERT出现奇怪错误(Msg 8107)

Sql server SQL Server 2008 R2上的SET IDENTITY\u INSERT出现奇怪错误(Msg 8107),sql-server,sql-server-2008,tsql,sql-server-2008-r2,runtime-error,Sql Server,Sql Server 2008,Tsql,Sql Server 2008 R2,Runtime Error,我正在尝试运行这段代码: SET IDENTITY_INSERT [dbo].[FIN_REP_REPORT_LOG] ON SET IDENTITY_INSERT [dbo].[REPORT_LOG_SEQ] ON INSERT INTO [dbo].[REPORT_LOG_SEQ] ([sqVal]) VALUES (1000000); 我得到了这个错误: 供参考:我将财务报告日志称为“表A”,报告日志如下称为“表B” REPORT_LOG_SEQ表上第二个IDENTITY_INSERT

我正在尝试运行这段代码:

SET IDENTITY_INSERT [dbo].[FIN_REP_REPORT_LOG] ON
SET IDENTITY_INSERT [dbo].[REPORT_LOG_SEQ] ON
INSERT INTO [dbo].[REPORT_LOG_SEQ] ([sqVal]) VALUES (1000000);
我得到了这个错误:

供参考:我将财务报告日志称为“表A”,报告日志如下称为“表B”

REPORT_LOG_SEQ表上第二个IDENTITY_INSERT语句后的错误消息甚至不相关

SET IDENTITY_INSERT [TABLE B] ON
--Msg 8107, Level 16, State 1, Line 1
--IDENTITY_INSERT is already ON for table [TABLE A]. 
--Cannot perform SET operation for table [TABLE B].
INSERT INTO语句随后对[表B]失败

INSERT INTO [TABLE B] ([sqVal])
VALUES (1000000)
--Msg 544, Level 16, State 1, Line 1
--Cannot insert explicit value for identity column in table [TABLE B] when IDENTITY_INSERT is set to OFF.
[表B]上的SET操作没有发生,因此插入操作失败

我想知道的是:

  • 为什么第二个SET IDENTITY_INSERT语句失败
  • 为什么错误消息甚至引用了不相关的[表A]
  • 我能做些什么来修复它
  • 场景:

    • 我一次只运行一行代码
    • 我正在使用SQLServer2008R2
    • 代码在“dev”和“test”服务器中运行良好,但失败了 在生产服务器上
    • 生产服务器的“兼容性级别”为100。它是水平的 80用于“开发”和“测试”服务器
    • 它们在所讨论的表之间没有相互依赖关系
    • 我不是DBA。我只能在“dev”上运行代码。DBA必须运行 关于“测试”和“产品”的代码
    • DBA和我一样难堪
    供参考: 财务报告日志的表定义(表A):

    报表日志的表定义(表B):

    任何帮助(甚至线索)都将不胜感激。:)

    从中可以看出:

    一次只能为数据库中的一个表将IDENTITY_INSERT设置为on。必须先将其关闭,然后才能为其他表再次打开

    1:它失败,因为数据库中已经有一个启用了IDENTITY_INSERT的表

    2:已启用标识\u INSERT的表的错误状态

    3: 这段代码似乎根本没有在dev环境中运行。 尝试在SSMS中的新查询编辑器中运行下面的代码,看看是否出现错误。(替换表名)

    我相信你会得到错误。这应该澄清环境之间的区别。不要忘了在测试后运行关机,以避免调试时出现问题

    SET IDENTITY_INSERT [dbo].[Your tableName] OFF
    

    从那时起,您必须重构代码,使之在启用IDENTITY_INSERT的情况下一次只有一个表。

    我认为您一次只能为一个表设置IDENTITY INSERT。看起来您正在尝试同时为两个表执行此操作。您为表A启用了IDENTITY_INSERT,并且再次为表B执行此操作。只需为表A执行关闭操作,然后为表B运行,可能就是这样。在dev和test中,我们先处理一个表,然后处理另一个表。
    CREATE TABLE [dbo].[REPORT_LOG_SEQ](
        [sqVal] [bigint] IDENTITY(1000000,1) NOT NULL
    ) ON [PRIMARY]
    
    SET IDENTITY_INSERT [dbo].[Your tableName] ON
    SET IDENTITY_INSERT [dbo].[Your tableName2] ON
    
    SET IDENTITY_INSERT [dbo].[Your tableName] OFF