Proszę bardzo, pokazuję to za pomocą przykładowego schematu, ponieważ nie podałeś swoich prawdziwych nazw tabel/kolumn.
Tabela:
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
)
Oto definicja wyzwalacza:
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
Zasadniczo zastępuje każdą instrukcję INSERT wykonaną w tabeli tą w wyzwalaczu, więc sprawdzam za pomocą inserted
tabela tymczasowa, aby sprawdzić, czy wartość, która próbuje zostać wstawiona do naszej opcjonalnej kolumny niepodlegającej wartości null, col3
, jest NULL. Jeśli tak, zastępuję go dodaniem col1
i col2
(Łączę się z zerem, ponieważ nie wspomniałeś, czy dwie kolumny źródłowe mają wartość null, czy nie).
Następnie możesz uruchomić instrukcje insert, które albo je zawierają, albo nie, pomimo faktu, że col3
nie jest nullable:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Wyniki to:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Jeśli wyzwalacza nie było, mógł wystąpić błąd podczas próby uruchomienia pierwszej instrukcji insert, informujący, że nie można wstawić wartości NULL do col3
.
Zauważ również, że druga instrukcja INSERT, która określa wartość, nie została zastąpiona przez dodanie, zgodnie z żądaniem.
Oto działający SQL Fiddle .