INSTEAD OF トリガ内の text 型、ntext 型、および image 型のデータの使用

データ変更には、text 型、ntext 型、および image 型の列が関係することがあります。ベース テーブルでは、text 型、ntext 型、または image 型の列に格納されている値は、データを保持しているページを指すテキスト ポインタです。詳細については、「行内データ」を参照してください。

注意

text 型、ntext 型、および image 型のデータは、旧バージョンとの互換性のためだけに使用できます。大量のデータの格納には、varchar(max) データ型、nvarchar(max) データ型、および varbinary(max) データ型を使用することをお勧めします。AFTER トリガと INSTEAD OF トリガは、inserted テーブルと deleted テーブルについて varchar(max) 型、nvarchar(max) 型、および varbinary(max) 型のデータの使用をサポートしています。

inserted テーブルと deleted テーブルの text 型、ntext 型、または image 型のデータは、AFTER トリガではサポートされませんが、INSTEAD OF トリガではサポートされます。text 型、ntext 型、および image 型のデータは、inserted テーブルや deleted テーブルに格納されます。格納方法は、ベース テーブルに格納される場合とは異なります。text 型、ntext 型、および image 型のデータは、独立したページ チェーンとしては格納されません。これらのデータは各行の中で連続した文字列として格納されます。つまり、inserted テーブルと deleted テーブル内の text 型、ntext 型、または image 型の各列にはテキスト ポインタがありません。TEXTPTR 関数と TEXTVALID 関数や、READTEXT、UPDATETEXT、および WRITETEXT の各ステートメントは、inserted テーブルまたは deleted テーブルの text 型、ntext 型、または image 型の各列に対しては無効です。text 型、ntext 型、または image 型の各列のその他の使用はすべてサポートされています。たとえば選択リストでの参照、WHERE 句の検索条件、または SUBSTRING、PATINDEX、CHARINDEX の各関数で使用できます。INSTEAD OF トリガ内の text 型、ntext 型、または image 型のデータでの操作は、現在の SET TEXTSIZE オプションの影響を受けます。このオプションの値は、@@TEXTSIZE 関数を使用して特定できます。

次のように、inserted テーブルと deleted テーブルに格納されている text 型、ntext 型、または image 型の各データの型は、トリガの動作 (INSERT、UPDATE、または DELETE) によって異なります。

  • INSERT ステートメントの場合、inserted テーブルには text 型、ntext 型、または image 型の各列に新しく作成された値が含まれます。deleted テーブルには行がありません。

  • DELETE ステートメントの場合、inserted テーブルには行がありません。また、deleted テーブルの行には、DELETE の実行前に text 型、ntext 型、または image 型の各列に入っていた値が含まれています。

  • UPDATE ステートメントで text 型、ntext 型、または image 型の値が変更されていない場合、inserted テーブルと deleted テーブルの両方の text 型、ntext 型、または image 型の各列には同じ値が含まれています。

  • UPDATE ステートメントで text 型、ntext 型、または image 型の値が変更された場合、deleted テーブルには UPDATE の開始前に存在したデータの値が含まれ、inserted テーブルには SET 句で指定したすべての変更内容を持つデータが含まれています。

INSERT、UPDATE、または DELETE の各ステートメントによって text 型、ntext 型、または image 型の大きな値を含む多数の行が変更された場合、inserted テーブルと deleted テーブルで text 型、ntext 型、または image 型のデータのコピーを保持するには、大量のメモリが必要になることがあります。また、大量のデータをコピーすると、パフォーマンスが低下する可能性もあります。INSERT、UPDATE、および DELETE の各ステートメントによって INSTEAD OF トリガを持つビューまたはテーブルを参照する場合の変更は、できる限り 1 行ずつまたは数行ずつ行うようにしてください。

関連項目

概念