【问题标题】:"Schema changed after the target table was created. Rerun the Select Into query.":“创建目标表后架构已更改。重新运行 Select Into 查询。”:
【发布时间】:2010-11-10 16:28:28
【问题描述】:

我有一些代码可以禁用表上的触发器、运行更新并重新启用触发器。它不会删除源表或更新架构。

这一切都很好,但同时运行的单独查询使用该表作为 SELECT INTO 的源。由于某种原因,当两个查询同时运行时,我收到此错误:

在目标表之后改变了架构 被创建。重新运行选择进入 查询。

(我正在选择一个临时表。)

那么,我的第一个问题:

调用“DISABLE TRIGGER”或“ENABLE TRIGGER”是否会更改 TSQL 中表的架构?

还有我的第二个问题:

当目标是临时表时,为什么第二个查询会报告架构更改?

【问题讨论】:

    标签: sql-server tsql triggers


    【解决方案1】:

    显然调用“DISABLE TRIGGER”或“ENABLE TRIGGER”确实会改变表的架构。系统表中可能有一个 catch all bit 标志来跟踪此更改并导致您悲伤。

    您可能可以以不同的方式“告诉”触发器“不运行”。创建表并插入一行,在触发器中检查该表中一行是否存在,如果存在则返回0,否则进行处理。现在只需根据需要插入/删除这一行...

    【讨论】:

    • 嗯...谢谢!至少这解释了这种行为。不过,似乎可用的解决方案有点杂乱无章。
    【解决方案2】:

    您永远不想在非单用户模式的生产系统上禁用触发器,否则您可能会遇到严重的数据完整性问题。它会禁用所有用户的触发器,而不仅仅是您。如果您希望数据库正常运行,我认为您需要找到一种不同的方法来处理您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 2017-03-13
      相关资源
      最近更新 更多