Ето, демонстрирам това с примерна схема, тъй като не сте предоставили истинските си имена на таблици/колони.
Таблица:
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
временна таблица, за да видите дали стойността, която се опитва да бъде вмъкната в нашата незадължителна незадължителна колона, col3
, е NULL. Ако е, замествам го с добавяне на col1
и col2
(Обединявам с нула, тъй като не споменахте дали двете колони източник са nullable или не).
След това можете да стартирате изрази за вмъкване, които или го включват, или не, въпреки факта col3
не е nullable:
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
.
Забележете също, че вторият оператор за вмъкване, който указва стойност, не е заменен от добавянето, както е поискано.
Ето един работещ SQL Fiddle .