【问题标题】:Multiple rows update trigger多行更新触发器
【发布时间】:2010-03-19 13:05:31
【问题描述】:

如果我有一个声明 更新多行,只有触发器只会在第一行或最后一行被更新(不确定哪一行)上触发。我需要创建一个触发器来触发所有正在更新到特定表中的记录

【问题讨论】:

  • 更安静地提问。我已经部分失聪了
  • @sony:请永远不要使用全大写!看起来你在大喊大叫!
  • 哪个数据库软件?触发器支持因供应商而异。
  • 建议您向我们提供触发代码和您正在使用的数据库,然后我们可以帮助您完成您需要的工作。

标签: sql database triggers


【解决方案1】:

假设 SQL Server,触发器每次更新仅触发一次,而与更新的行数无关。如果您需要基于对多行的更新执行一些附加逻辑,您可以通过查看在触发器上下文中可访问的 INSERTED 和 DELETED 逻辑表来访问更改的记录。

【讨论】:

    【解决方案2】:

    你还没有指定数据库..... 在 Oracle 中,可以根据事务类型定义触发器以针对单个行触发:

    CREATE OR REPLACE TRIGGER BIUDR_MY_TABLE
     BEFORE INSERT OR UPDATE OR DELETE
        ON MY_TABLE
        REFERENCING NEW AS NEW OLD AS OLD
        FOR EACH ROW
    DECLARE
      pk   PLS_INTEGER;
    BEGIN
       etc ....
    

    【讨论】:

      【解决方案3】:

      您只需指明您的触发器是需要执行“FOR EACH ROW”还是“FOR EACH STATEMENT”。在触发器定义中添加这两个子句之一将告诉 DBMS 何时执行触发器(大多数但不是所有 DBMS 都支持它)。如果您不指明此子句,则 DBMS 使用默认选项,在您的情况下似乎是 FOR EACH STATEMENT 选项,这就是为什么您的触发器只为每个更新语句触发一个,而不管您要更新多少行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多