【问题标题】:SQL Server: Accessing transactional data in nested triggersSQL Server:访问嵌套触发器中的事务数据
【发布时间】:2023-04-07 23:44:01
【问题描述】:

我在 Ms SQL Server 中有以下设置

表A

Id 唯一标识

状态 nvarchar(“未知”、“进行中”、“已完成”)

其他栏目...

表B

Id 唯一标识

LastModifiedDate 日期

其他栏目...

TableA 有一个 Update 触发器,每次 TableA 发生变化时都会更改 TableB 上的 LastModifiedDate

TableB 有一个触发器,每次 LastModifiedDate 更改时都会将消息放入 SSB 队列。

问题:如何修改 TableB 的触发器,使其仅在表的状态完成时触发。

挑战在于TableA中Status的修改过程中,TableB中引起的trigger无法访问tableA的最新值(例如Completed)

我对以下内容不感兴趣: 1) 向 TableB 添加另一列,当 Status == complete 时 TriggerA 将修改该列 2) 使用全局临时表。

还有其他聪明的方法吗? (例如,在嵌套的 TriggerB 中读取 TriggerA 的“更新”值)

【问题讨论】:

  • 这些是不是更新或更新后的触发器?如果它们在更新触发器之后,您应该可以从表 B 访问表 A 的最新值

标签: sql-server triggers nested


【解决方案1】:

由于事物的事务性质,它们是更新触发器。更新后触发器确实会简化整个场景,但很容易导致 TableA 和 TableB 不同步。到目前为止,我发现的唯一合理的解决方案是在 TableA 状态不是“完成”时过滤掉 TableB 的触发器,并在 TableA 上添加第三个触发器,当状态更改为 Completed 时,它将复制 TableB 触发器。它不像我希望的那样优雅并且重复代码。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多