Verwenden von text-, ntext- und image-Daten in INSTEAD OF-Triggern
An Datenänderungen können text-, ntext- und image-Spalten beteiligt sein. In Basistabellen ist der in einer Spalte vom Datentyp text, ntext oder image gespeicherte Wert ein Textzeiger, der auf die Seiten mit den Daten zeigt. Weitere Informationen finden Sie unter Daten in Zeilen.
![]() |
---|
Die Verwendung von text-, ntext- und image-Daten ist nur aus Gründen der Abwärtskompatibilität verfügbar. Die bevorzugte Speichermethode für große Datenmengen ist die Verwendung der varchar(max)-, nvarchar(max)- und varbinary(max)-Datentypen. Sowohl AFTER- als auch INSTEAD OF-Trigger unterstützen die Verwendung von varchar(max)-, nvarchar(max)- und varbinary(max)-Daten in inserted- und deleted-Tabellen. |
INSTEAD OF-Trigger unterstützen zwar text-, ntext- und image-Daten in inserted- und deleted-Tabellen, AFTER-Trigger jedoch nicht. text-, ntext- und image-Daten werden in inserted- oder deleted-Tabellen anders gespeichert als Daten in Basistabellen. text-, ntext- und image-Daten werden nicht als getrennte Seitenketten gespeichert. Stattdessen werden sie als fortlaufende Zeichenfolge innerhalb jeder Zeile gespeichert. Dies bedeutet, dass es für text-, ntext- und image-Spalten in den inserted- und deleted-Tabellen keine Textzeiger gibt. Die TEXTPTR- und TEXTVALID-Funktionen und die READTEXT-, UPDATETEXT- und WRITETEXT-Anweisungen sind für text-, ntext- und image-Spalten in den inserted- oder deleted-Tabellen nicht zulässig. Alle anderen Verwendungsmöglichkeiten von text-, ntext- und image-Spalten werden unterstützt, wie z. B. Verweise auf diese Spalten in Auswahllisten, Suchbedingungen von WHERE-Klauseln oder SUBSTRING-, PATINDEX- oder CHARINDEX-Funktionen. Vorgänge, die in INSTEAD OF-Triggern auf text-, ntext- und image-Daten ausgeführt werden, werden von der jeweils aktuellen Einstellung der SET TEXTSIZE-Option beeinflusst. Dieser Wert kann mithilfe der @@TEXTSIZE-Funktion bestimmt werden.
Die in den inserted- und deleted-Tabellen gespeicherte Art der text-, ntext- oder image-Daten variiert je nach Triggeraktion (INSERT, UPDATE oder DELETE):
- Bei INSERT-Anweisungen enthält die inserted-Tabelle den neuen Wert für die text-, ntext- oder image-Spalte. Die deleted-Tabelle weist keine Zeilen auf.
- Bei DELETE-Anweisungen weist die inserted-Tabelle keine Zeile auf, und die Zeilen der deleted-Tabelle enthalten die Werte, die die text-, ntext- oder image-Spalte vor der Ausführung der DELETE-Anweisung aufwies.
- Bei UPDATE-Anweisungen, bei denen der text-, ntext- oder image-Wert nicht geändert wird, enthält sowohl die inserted-Tabelle als auch die deleted-Tabelle die gleichen Werte für die text-, ntext- oder image-Spalte.
- Bei UPDATE-Anweisungen, bei denen der text-, ntext- oder image-Wert geändert wird, enthält die deleted-Tabelle dieselben Datenwerte wie vor der Ausführung der UPDATE-Anweisung, und die inserted-Tabelle enthält die Daten mit den in der SET-Klausel angegebenen Änderungen.
Wenn eine INSERT-, UPDATE- oder DELETE-Anweisung viele Zeilen mit großen Werten vom Typ text, ntext oder image ändert, ist gegebenenfalls sehr viel Arbeitsspeicher erforderlich, um die Kopien der text-, ntext- oder image-Daten in den inserted- und deleted-Tabellen zu speichern. Das Kopieren umfangreicher Datenmengen kann auch die Leistung beeinträchtigen. INSERT-, UPDATE- und DELETE-Anweisungen, die auf Sichten oder Tabellen verweisen, die INSTEAD OF-Trigger aufweisen, sollten nach Möglichkeit jeweils nur eine Zeile oder eine kleinere Menge Zeilen ändern.
Siehe auch
Konzepte
Verwenden von INSTEAD OF-Triggern