Tady to máte, demonstruji to na příkladu schématu, protože jste neuvedli své skutečné názvy tabulek/sloupců.
Tabulka:
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
)
Zde je definice spouštěče:
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
V podstatě nahradí jakýkoli příkaz vložení provedený v tabulce příkazem ve spouštěči, takže zkontroluji pomocí inserted
dočasnou tabulku, abyste zjistili, zda se hodnota, kterou se pokoušíte vložit do našeho volitelného sloupce bez možnosti null, col3
, je NULL. Pokud je, nahradím ho přidáním col1
a col2
(Slučuji se s nulou, protože jste nezmínil, zda jsou dva zdrojové sloupce s možnou hodnotou null nebo ne).
Poté můžete spustit příkazy insert, které jej buď obsahují, nebo ne, navzdory skutečnosti col3
nemá hodnotu null:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Výsledky jsou:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Pokud tam spouštěč nebyl, mohli jste dostat chybu při pokusu o spuštění prvního příkazu vložení, který vám říká, že nelze vložit NULL do col3
.
Všimněte si také, že druhý příkaz insert, který určuje hodnotu, nebyl nahrazen přidáním, jak bylo požadováno.
Zde je funkční SQL Fiddle .