Varsågod, jag visar detta med ett exempelschema eftersom du inte har angett dina riktiga tabell-/kolumnnamn.
Tabell:
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
)
Här är triggerdefinitionen:
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
Det ersätter i princip alla insert-satser som gjorts på bordet med den i triggern, så jag kontrollerar med inserted
temporär tabell för att se om värdet som försöker infogas i vår icke-nullbara valfria kolumn, col3
, är inget. Om det är det, ersätter jag det med tillägget av col1
och col2
(Jag sammansmälter med noll eftersom du inte nämnde om de två källkolumnerna är nullbara eller inte).
Du kan sedan köra insert-satser som antingen inkluderar det eller inte, trots faktumet col3
är inte nullbar:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Resultaten är:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Om triggern inte fanns där kan du ha fått ett felmeddelande när du försökte köra den första insert-satsen, som talar om för dig att den inte kunde infoga NULL i col3
.
Observera också att den andra infogningssatsen som anger ett värde inte har ersatts av tillägget som begärts.
Här är en fungerande SQL-fiol .