ほら、実際のテーブル/列名を提供していないので、スキーマの例でこれを示しています。
表:
CREATE TABLE test
(
id INT NOT NULL PRIMARY KEY IDENTITY, --made up key
col1 INT, --first column to add, wasn't sure if this was nullable or not
col2 INT, --second column to add, wasn't sure if this was nullable or not
col3 INT NOT NULL --this is the column to optionally insert into
)
トリガーの定義は次のとおりです:
CREATE TRIGGER demo
ON test
INSTEAD OF INSERT
AS
INSERT INTO test (col1,col2,col3)
SELECT inserted.col1,
inserted.col2,
CASE
WHEN inserted.col3 IS NULL THEN COALESCE(inserted.col1, 0) + COALESCE(inserted.col2, 0)
ELSE inserted.col3
END
FROM inserted
基本的に、テーブルで実行された挿入ステートメントをトリガー内のステートメントに置き換えるため、 inserted
を使用してチェックします null 非許容のオプションの列 col3
に挿入しようとしている値を確認するための一時テーブル 、 無効です。ある場合は、col1
を追加して置き換えます および col2
(2 つのソース列が null 可能かどうかについて言及していないため、ゼロと合体しています)。
col3
という事実にもかかわらず、それを含むかどうかに関係なく、insert ステートメントを実行できます。 null 可能ではありません:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
結果:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
トリガーが存在しない場合、最初の挿入ステートメントを実行しようとしたときにエラーが発生し、col3
に NULL を挿入できないことが通知された可能性があります。 .
また、値を指定する 2 番目の挿入ステートメントが、要求どおりに追加で置き換えられていないことにも注意してください。
動作中の SQL Fiddle を次に示します。 .