Триггер после обновления: как выполнить запрос для каждой обновленной строки - PullRequest
0 голосов
/ 27 марта 2019

Я написал триггер для выполнения запроса после обновления столбца (retard) в моей таблице, но иногда есть много обновленных строк, как это решить?

CREATE OR ALTER TRIGGER notifRetard
  ON Taches
  AFTER UPDATE
  AS
  BEGIN
      SET NOCOUNT ON;

      DECLARE @value INT

      IF UPDATE(retard)
         -- How to make this for every row updated???
         SELECT
             @value = inserted.retard
         FROM
             inserted;

         IF @value = 1
            -- run SQL query 
  END



1 Ответ

0 голосов
/ 28 марта 2019

Решение, если кому-то еще нужно, это использовать CURSOR.

    CREATE or alter TRIGGER notifRetard
    ON  Taches
    AFTER UPDATE

    AS
      BEGIN
        SET NOCOUNT ON;
         IF UPDATE(retard)
         begin
            DECLARE @RefTache varchar(50),@RefPhase numeric(4,0),@IDprojet varchar(50),@IDressource varchar(50) @retard bit;

             DECLARE  TrigTempUpdate_Cursor CURSOR FOR

         SELECt RefTache,RefPhase,IDprojet,IDressource,retard
    FROM
      inserted;

          begin
        OPEN TrigTempUpdate_Cursor;

        FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard

        WHILE @@FETCH_STATUS = 0

        BEGIN
         if @retard=1
        --DO QUERY HERE
        FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard
        END;
        end;
        CLOSE TrigTempUpdate_Cursor;

        DEALLOCATE TrigTempUpdate_Cursor;

        end;
        end;
...