2017-08-10 2 views
0

Ich bin ziemlich neu in T-SQL, aber ich habe eine Frage zu Triggern. Ich habe einen Auslöser geschrieben, der in meiner gespeicherten Prozedur verwendet wird, die Daten einfügt und aktualisiert.T-SQL Trigger INSERT UPDATE

nun der Auslöser funktioniert, wenn jede Zeile in der Tabelle aktualisiert wird [dbo].[users]

Ich weiß nicht, wie diese Trigger zu ändern, so dass, wenn die Daten in [dbo].[users] Tabelle den Trigger aktivieren eingeführt wird (dies funktioniert jetzt), aber wie ein Aktualisierungsszenario für denselben Trigger zu erreichen, dass, wenn nur eine bestimmte Zeile in [dbo].[users] Tabelle AKTUALISIERT ist, nur dann der Trigger aktiviert werden sollte.

Zum Beispiel

  1. Wenn ein neuer Benutzer eingefügt wird und alle Zeilen in dieser Tabelle eingefügt - aktivieren Trigger

  2. Wenn ein alter Trigger aktualisiert wird, sondern nur ein bestimmtes Feld in dieser Tabelle ist aktualisiert (working_state ist der Name einer Spalte) dann sollte nur der Trigger aktiviert werden.

Quellcode, was ich hier gezeigt:

ALTER TRIGGER [dbo].[t_temp_triger_name] 
ON [dbo].[users] 
AFTER INSERT, UPDATE, DELETE 
AS 
BEGIN 
    DECLARE @working_state char(1), 
      @user_code char(11) 

    DECLARE zm CURSOR FOR 
     SELECT 
      working_state, 
      user_code 
     FROM 
      inserted 
-- Added update statement that activates the trigger only when a specific - 
-- column update is executed 
UPDATE [dbo].[users] 
SET working_state = 1 
FROM [dbo].[users] U 
INNER JOIN DELETED D ON U.user_code= D.user_code 
WHERE U.working_state<> D.working_state 


    OPEN zm 

    FETCH NEXT FROM zm INTO @working_state, @user_code 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     EXEC [FNF].[dbo].[NamedProcedure] 
       @working_state, @user_code 

     FETCH NEXT FROM zm INTO @working_state, @user_code 
    END 

    CLOSE zm 
    DEALLOCATE zm 
END 
+0

Ist es möglich, dies nur mit 1 Trigger zu erreichen? – dmxyler

Antwort

0

Ich habe kam mit einer Lösung bis

hinzugefügt, dies zu meinem Code nach Erklärung

Alles funktioniert gut.