【问题标题】:Writing trigger on one table1 to update table2 and trigger on table2 to update table1在一个 table1 上写入触发器以更新 table2,并在 table2 上写入触发器以更新 table1
【发布时间】:2017-09-22 09:10:22
【问题描述】:

我有两个服务,我想在数据库表中保持同步,所以如果 service1 更新 table1,那么我也想更新 table2。如果 service2 更新 table2 那么我也想更新 table1。

我可以在 table1 上编写一个触发器来更新 table2,然后再在 table2 上编写一个触发器来更新 table1?这会造成循环吗?

【问题讨论】:

  • 没有办法将一个触发器链接到两个表,除非您创建一个隐藏两个表的可更新视图映射所有应用程序代码以使用此视图。但此解决方案仅在您从头开始开发新应用程序时才有用。
  • 这似乎不是最好的设计 - 要么有 1 个表,要么同时更新两者。但是如果你不能这样做,那么你可以在触发器中添加一个检查,并且只有在值不同时才更新,否则你可能会陷入循环

标签: sql-server


【解决方案1】:

我可以在 table1 上写一个触发器来更新 table2,然后再写一个触发器吗 在 table2 上更新 table1?这会造成循环吗?

这取决于服务器选项nested triggers

nested triggers 选项控制 AFTER 触发器是否可以 级联。也就是说,执行启动另一个触发器的操作, 这会启动另一个触发器,依此类推。当嵌套触发器是 设置为 0,AFTER 触发器不能级联。 设置嵌套触发器时 为 1(默认值),AFTER 触发器可以级联多达 32 个 INSTEAD OF 触发器可以嵌套,而不管 这个选项。

但无论如何,您都可以避免在触发器中将此代码作为第一条语句编写:

IF TRIGGER_NESTLEVEL() > 1 RETURN;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多