2010-06-06 10 views

Antwort

69

SQL Server löst den Zugriff auf 2 „Magie“ Tabellen haben, die eine Zeile für jede Zeile enthalten, die eingesetzt wird, wurde aktualisiert, oder in der Anweisung gelöscht, die der Auslöser auszuführen verursacht.

Um alle der eingefügten Zeilen auf einer INSERT-Anweisung zu finden:

select * from inserted 

Für alle gelöschten Zeilen auf einer DELETE-Anweisung:

select * from deleted 

Für UPDATE-Anweisungen, jede Zeile aktualisiert werden in den eingefügten und gelöschten Tabellen vorhanden. Die eingefügte Tabelle enthält den neuen Wert der Zeile nach der Aktualisierungsanweisung und die gelöschte Tabelle enthält den alten Wert der Zeile unmittelbar vor der Aktualisierungsanweisung. Verbinden Sie zwischen den zwei Tabellen, um zu bekommen, was Sie brauchen:

select i.*, d.* 
from inserted i 
join deleted d on (i.id = d.id) 
+0

+1 Danke für den Punkt über Update-Zeilen in gelöschten und eingefügten Tabellen vorhanden. – mdma

+0

So viel wie ich diese Lösung mag, möchte ich darauf hinweisen, dass _if_ die Tabelle durch den Trigger keinen Primärschlüssel, die 'update' Anweisung nicht nützlich ist :( –

+0

Solange es einen Weg zu sinnvoll verbinden Sie zwischen den beiden Tabellen (wie die WHERE-Klausel der UPDATE-Anweisung in der Regel verwendet), wird es sinnvoll sein, auch wenn die Tabelle keinen formellen Primärschlüssel hat. –

1

Sie die spezielle Trigger wollen werden gelöscht eingefügte Tabellen. Von MSDN:

In DML-Triggern werden die Tabellen eingefügt und gelöscht in erster Linie auszuführen, um die folgenden verwendet: Extend referentielle Integrität zwischen Tabellen. Einfügen oder Aktualisieren von Daten in Basistabellen, die einer Sicht zugrunde liegen. Auf Fehler prüfen und basierend auf dem Fehler Maßnahmen ergreifen. Finden Sie den Unterschied zwischen dem Zustand einer Tabelle vor und nach einer Datenänderung und ergreifen Sie Maßnahmen basierend auf dieser Differenz. Die gelöschte Tabelle speichert Kopien der betroffenen Zeilen während DELETE- und UPDATE-Anweisungen. Während der Ausführung einer DELETE- oder UPDATE-Anweisung werden Zeilen aus der Trigger-Tabelle gelöscht und in die gelöschte Tabelle übertragen. Die gelöschte Tabelle und die Auslösetabelle haben normalerweise keine gemeinsamen Zeilen. Die eingefügte Tabelle speichert Kopien der betroffenen Zeilen während INSERT- und UPDATE-Anweisungen. Während einer Einfüge- oder Aktualisierungstransaktion werden der eingefügten Tabelle und der Triggertabelle neue Zeilen hinzugefügt. Die Zeilen in der eingefügten Tabelle sind Kopien der neuen Zeilen in der Auslösetabelle.

check here for more info

+0

Dieser Link ist tot. Kannst du es aktualisieren? –

+1

@FedericoTraiman, scheint der Link für mich arbeiten, dachte ein msdn Link würde wahrscheinlich nicht tot gehen. Ich habe dem Text der Antwort jedoch etwas Inhalt hinzugefügt. –

+0

Es lebt jetzt! Danke –