暗黙または明示的な NULL 値を使用した DML トリガの起動

NULL 値を明示的に列に挿入したり、DEFAULT キーワードを使用して列に値を割り当てると、DML トリガが正常に起動されます。同様に、INSERT ステートメントで列の値を指定しなくても、次の場合は DML トリガが起動されます。

  • DEFAULT 定義が存在しないため、NULL 値が暗黙的に列に挿入される。

  • DEFAULT 定義が存在するため、既定値が列に挿入される。

A. NULL 値と既定値を指定した場合のトリガ起動のテスト

次の例では、暗黙的および明示的な NULL 値によって、DML トリガがどのような影響を受けるかを示します。ここでは 2 つの整数値を保持する小さなテーブルを作成しています。1 つの列は NULL 値を格納できます。もう 1 つの列には既定値を格納します。DML トリガは、両方の列が変更されたかどうかを評価し、トリガ起動時にメッセージを表示します。以下では一連の INSERT ステートメントで、暗黙的および明示的な NULL 値のさまざまな組み合わせを挿入することにより、トリガの起動をテストしています。

CREATE TABLE t1
(a int NULL, b int NOT NULL DEFAULT 99)
GO

CREATE TRIGGER t1trig
ON t1
FOR INSERT, UPDATE
AS
IF UPDATE(a) AND UPDATE(b)
   PRINT 'FIRING'
GO

--When two values are inserted, the UPDATE is TRUE for both columns and the trigger is activated.
INSERT t1 (a, b) 
VALUES (1, 2) 

--When two values are updated, the UPDATE is TRUE for both columns and the trigger is activated.
UPDATE t1 
SET a = 1, b = 2

--When an explicit NULL is inserted in column a, the UPDATE is TRUE for both columns and the trigger is activated.
INSERT t1
VALUES (NULL, 2)

--When an explicit NULL is updated in column a, the UPDATE is TRUE for both columns,the trigger is activated.
UPDATE t1 
SET a = NULL, b = 2

--When an implicit NULL is inserted in column a, the UPDATE is TRUE for both columns and the trigger is activated.
INSERT t1 (b)
VALUES (2)

--When column a is updated with an implicit NULL, the UPDATE is FALSE for both columns and the trigger is not activated.
UPDATE t1 
SET b = 2

--When the default value is implicitly inserted in column b, the UPDATE is TRUE for both columns and the trigger is activated.
INSERT t1 (a)
VALUES (2)

--When column b is updated with an implicit NULL, the UPDATE is FALSE for both columns and the trigger is not activated.
UPDATE t1 
SET a = 2

--When the default value is explicitly inserted in column b, the UPDATE is TRUE for both columns and the trigger is activated.
INSERT t1 (a, b)
VALUES (2, DEFAULT)

--When column b is updated explicitly with the default value, the UPDATE is TRUE for both columns and the trigger is activated.
UPDATE t1 
SET a = 2, b = DEFAULT

関連項目

概念