Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mithilfe von INSTEAD OF UPDATE-Triggern für eine Sicht oder eine Tabelle können die Standardaktionen der UPDATE-Anweisung ersetzt werden. Normalerweise wird der INSTEAD OF UPDATE-Trigger für eine Sicht definiert, um Daten in mindestens einer Basistabelle zu ändern.
UPDATE-Anweisungen, die auf Sichten mit INSTEAD OF UPDATE-Triggern verweisen, müssen Werte für alle Sichtspalten angeben, die keine NULL-Werte zulassen und auf die in der SET-Klausel verwiesen wird. Dazu zählen Sichtspalten, die auf Spalten in der Basistabelle verweisen, für die keine Eingabewerte angegeben werden können, wie z. B.:
- Berechnete Spalten in der Basistabelle.
- Identitätsspalten in der Basistabelle, für die IDENTITY INSERT auf OFF festgelegt ist.
- Basistabellenspalten vom timestamp-Datentyp.
Wenn eine UPDATE-Anweisung, die auf eine Tabelle verweist, versucht, den Wert einer berechneten Spalte, einer Identitätsspalte oder einer timestamp-Spalte festzulegen, wird normalerweise ein Fehler generiert, da die Werte für diese Spalten von SQL Server 2005 bestimmt werden müssen. Diese Spalten müssen in die UPDATE-Anweisung eingeschlossen werden, um die NOT NULL-Anforderung der Spalte zu erfüllen. Wenn die UPDATE-Anweisung jedoch auf eine Sicht mit einem INSTEAD OF UPDATE-Trigger verweist, kann die im Trigger definierte Logik diese Spalten umgehen und den Fehler vermeiden. Hierzu darf der INSTEAD OF UPDATE-Trigger nicht versuchen, die Werte für die entsprechenden Spalten in der Basistabelle zu aktualisieren. Dies erreichen Sie, indem die Spalten in der SET-Klausel der UPDATE-Anweisung ausgeschlossen werden. Wenn ein Datensatz aus der inserted-Tabelle verarbeitet wird, kann die berechnete Spalte, die Identitätsspalte oder die timestamp-Spalte einen Dummywert enthalten, um die NOT NULL-Anforderung zu erfüllen; diese Werte werden jedoch von dem INSTEAD OF UPDATE-Trigger ignoriert, und stattdessen werden die ordnungsgemäßen Werte von SQL Server festgelegt.
Diese Lösung funktioniert, weil ein INSTEAD OF UPDATE-Trigger keine Daten aus den Spalten der inserted-Tabelle verarbeiten muss, die nicht aktualisiert wurden. In der an einen INSTEAD OF UPDATE-Trigger übergebenen inserted-Tabelle gelten für die Spalten, die in der SET-Klausel angegeben sind, dieselben Regeln wie für die inserted-Spalten in einem INSTEAD OF INSERT-Trigger. Für Spalten, die in der SET-Klausel nicht angegeben sind, enthält die inserted-Tabelle dieselben Werte wie vor dem Ausstellen der UPDATE-Anweisung. Mit der IF UPDATE(column)-Klausel kann der Trigger testen, ob eine bestimmte Spalte aktualisiert wurde. Weitere Informationen finden Sie unter INSTEAD OF INSERT-Trigger.
INSTEAD OF UPDATE-Trigger sollten Werte, die für berechnete, Identitätsspalten oder timestamp-Spalten angegeben werden, nur in Suchbedingungen der WHERE-Klausel verwenden.
Ein INSTEAD OF UPDATE-Trigger für eine Sicht sollte zum Verarbeiten aktualisierter Werte für berechnete Spalten, Identitätsspalten, timestamp- oder Standardspalten dieselbe Logik wie bei eingefügten Werten für diese Spaltentypen verwenden.
Hinweis: |
|---|
| INSTEAD OF UPDATE-Trigger können nicht für eine Tabelle definiert werden, für die ein Fremdschlüssel mit einer UPDATE-Aktion definiert wurde. |
Siehe auch
Konzepte
Verwenden von INSTEAD OF-Triggern
Hinweis: