2016-11-13 6 views
1

Ich versuche, einen Trigger zu erstellen, der eine Spalte für die zu aktualisierende Zeile auffüllen würde. Hier ist was ich getan habe, aber es funktioniert nicht:Erstellen eines Auslösers zum Aktualisieren

CREATE TRIGGER PSL_Cases_Address 
ON dbo.PSL_Cases 
AFTER INSERT, UPDATE 
AS 
    BEGIN 
     IF UPDATE(Permit_No) /*If column not affected skip*/ 
     BEGIN 
      UPDATE psl_cases 
      SET address = (
       SELECT TOP 1 permits.address 
       FROM permits 
       LEFT OUTER JOIN PSL_Cases ON PSL_Cases.Permit_No=Permits.PermitsID 
       WHERE PSL_Cases.PSL_CasesID=PSL_CasesID 
      ) 
      WHERE dbo.PSL_Cases.PSL_CasesID = PSL_CasesID; 
     END 
    END; 

Irgendwelche Ideen, was ich falsch machen könnte?

+2

Wenn Auftrag von nicht vorhanden ist, werden Sie nicht results..use, um durch sie deterministisch machen gewünscht erhalten – TheGameiswar

+4

Ein SQL Server-Trigger wird einmal für jede genannt update oder Insert-Anweisung, und die Tabellen _inserted_ und _updated_ werden für Sie ausgefüllt. Dies ist anders als beispielsweise bei Firebird, wo der Triggercode einmal für jeden Datensatz aufgerufen wird, der aktualisiert oder eingefügt wurde. Ihr SQL Server-Triggercode muss für die Arbeit mit den Tabellen _inserted_ und _updated_ erstellt werden. – nolaspeaker

+1

@nolaspeaker: Die Pseudo-Tabellen sind * eingefügt * und * Gelöscht * - es gibt keine * Aktualisiert * ... –

Antwort

1

Ich denke, das ist das, was Sie suchen

CREATE TRIGGER PSL_Cases_Address 
ON dbo.PSL_Cases 
AFTER INSERT, UPDATE 
AS 
BEGIN 
    IF UPDATE(Permit_No) /*If column not affected skip*/ 
    BEGIN 

     UPDATE PSL_Cases 

     SET PSL_Cases.[address] = permits.[address] 

     FROM inserted INNER JOIN PSL_Cases ON 

       inserted.[Permit_No] = PSL_Cases.[PermitsID] 

     INNER JOIN permits 

     ON inserted.[Permit_No] = Permits.[PermitsID]    

    END 
END; 
Verwandte Themen