Aqui está, estou demonstrando isso com um esquema de exemplo, pois você não forneceu seus nomes reais de tabela/coluna.
Mesa:
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
)
Aqui está a definição do gatilho:
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
Basicamente, ele substitui qualquer instrução de inserção feita na tabela com a do gatilho, então eu verifico usando o
inserted
tabela temporária para ver se o valor que está tentando ser inserido em nossa coluna opcional não anulável, col3
, é nulo. Se for, eu o substituo pela adição de col1
e col2
(Estou unindo com zero, pois você não mencionou se as duas colunas de origem são anuláveis ou não). Você pode então executar instruções de inserção que incluem ou não, apesar do fato de
col3
não é anulável:INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Os resultados são:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Se o gatilho não estivesse lá, você poderia ter recebido um erro ao tentar executar a primeira instrução de inserção, informando que não foi possível inserir NULL em
col3
. Observe também que a segunda instrução de inserção que especifica um valor não foi substituída pela adição, conforme solicitado.
Aqui está um SQL Fiddle em funcionamento .