ほら、実際のテーブル/列名を提供していないので、スキーマの例でこれを示しています。
テーブル:
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
が NULL かどうかを確認します。col1
そうである場合は、それをandの追加に置き換えますcol2
(2 つのソース列が null 可能かどうかについて言及していないため、ゼロと合体しています)。
col3
その後、 null 許容ではないという事実にもかかわらず、それを含むかどうかにかかわらず、insert ステートメントを実行できます。
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
トリガーが存在しない場合、最初の挿入ステートメントを実行しようとしたときにエラーが発生し、 NULL を に挿入できないことが通知された可能性がありますcol3
。
また、値を指定する 2 番目の挿入ステートメントが、要求どおりに追加で置き換えられていないことにも注意してください。
これが実際のSQL Fiddleです。