gpt4 book ai didi

sql-server - SQL Server 2008 R2 上的 SET IDENTITY_INSERT 出现奇怪错误(消息 8107)

转载 作者:行者123 更新时间:2023-12-01 16:39:05 25 4
gpt4 key购买 nike

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

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);

我收到此错误: SQL Server 2008 R2 - Error1

仅供引用:我将 FIN_REP_REPORT_LOG 称为“表 A”,将 REPORT_LOG_SEQ 称为“表 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].

对于 [TABLE B],INSERT INTO 语句会失败!

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.

[TABLE B] 上的 SET 操作未发生,因此 INSERT 操作失败。

我想知道的是:

  1. 为什么第二个 SET IDENTITY_INSERT 语句失败?
  2. 为什么错误消息甚至引用了不相关的[表 A]?
  3. 我可以采取什么措施来解决这个问题?

场景:

  • 我一次运行一行代码!
  • 我使用的是 SQL Server 2008 R2
  • 代码在“开发”和“测试”服务器中运行良好,但失败在生产服务器上。
  • 生产服务器的“兼容级别”为 100。级别80 用于“开发”和“测试”服务器。
  • 相关表之间不存在相互依赖关系。
  • 我不是 DBA。我只能在“dev”上运行代码。 DBA必须运行“测试”和“产品”上的代码。
  • DBA 和我一样困惑。

仅供引用:FIN_REP_REPORT_LOG 的表定义(表 A):

CREATE TABLE [dbo].[FIN_REP_REPORT_LOG](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[REPORT_NAME] [nvarchar](50) NOT NULL,
[EMPLOYEE_NUMBER] [nvarchar](10) NULL,
[PARAMS] [nvarchar](1000) NULL,
[START_DATE] [datetime2](0) NOT NULL,
[END_DATE] [datetime2](0) NULL
) ON [PRIMARY]

REPORT_LOG_SEQ(表 B)的表定义:

CREATE TABLE [dbo].[REPORT_LOG_SEQ](
[sqVal] [bigint] IDENTITY(1000000,1) NOT NULL
) ON [PRIMARY]

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

最佳答案

来自here它说:

IDENTITY_INSERT can only be set to on for one table in a database at a time. It must be turned off, before it can be turned on again for a different table.

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

2:错误状态哪个表已启用 IDENTITY_INSERT。

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

SET IDENTITY_INSERT [dbo].[Your tableName] ON
SET IDENTITY_INSERT [dbo].[Your tableName2] ON

我相信你会得到这个错误。这应该澄清环境之间的差异。不要忘记在测试后运行关闭以避免调试时出现麻烦。

SET IDENTITY_INSERT [dbo].[Your tableName] OFF

从这里开始,您必须重构代码,以便在启用 IDENTITY_INSERT 的情况下一次只有一张表。

关于sql-server - SQL Server 2008 R2 上的 SET IDENTITY_INSERT 出现奇怪错误(消息 8107),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com