SQL Server After Update-Trigger Funktioniert Nicht

habe ich schema mit der folgenden Struktur;
SQL Server After Update-Trigger Funktioniert Nicht

In MPRMain Tabelle, die Status werden kann 1(Genehmigen), 2(Abbrechen) und 3(Pending). Ich versuche, so etwas zu tun.e.g Wenn jemand aktualisieren Status (in MPRMain) zu 2(Abbrechen). Ich will Update das Status einer MPRDetail Tabelle 0 (0 zum deaktivieren und 1 zum aktivieren).

So, ich habe versucht, einen trigger erstellen, die wie folgt aussieht;

Alter Trigger Inventory.MprMainUpdate
    ON Inventory.MPRMain
    AFTER UPDATE
AS
BEGIN 

    declare @status as int;
    set @status = (SELECT Status FROM inserted);
    if(@status=2)
    BEGIN
        UPDATE Inventory.MPRDetail
        SET Status = 0   -- update the status to canceled
        WHERE MPRId = (select MPRId from inserted);
    END

END

Jedoch, Wenn ich versuche, um die Status einer MPRMain zu 2 (Abbrechen) Von 1 (Genehmigen), ich sehe keine änderungen in MPRDetail Tabelle. Dies sollte aktualisieren Sie die MPRDetail Status 0 (0 für deaktivieren).

  • Ihr erstes problem ist, dass Sie falsch unter der Annahme, dass der trigger aufgerufen wird einmal pro Zeile - ist es nicht. Es heißt einmal pro Anweisung und Ihre Inserted Tabelle kann (und wird!) enthalten mehrere Zeilen - so das man Sie wählen Sie mit set @status = (SELECT Status FROM inserted); - dies ist nicht definiert. Sie müssen schreiben Sie Ihre trigger zu berücksichtigen, dass Inserted (und Deleted) werden enthalten mehrere Zeilen! Sie muss um diese mit einen set-basierten Ansatz
  • jedes Beispiel, das von Euch geschätzt wird. Ich havn ' T verwendet Trigger vor.
Schreibe einen Kommentar