Voilà, je le démontre avec un exemple de schéma puisque vous n'avez pas fourni vos vrais noms de table/colonne.
Tableau :
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
)
Voici la définition du déclencheur :
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
Fondamentalement, il remplace toute instruction d'insertion effectuée sur la table par celle du déclencheur, donc je vérifie en utilisant le inserted
table temporaire pour voir si la valeur qui tente d'être insérée dans notre colonne facultative non nulle, col3
, est NUL. Si c'est le cas, je le remplace par l'ajout de col1
et col2
(Je fusionne avec zéro car vous n'avez pas mentionné si les deux colonnes source sont nullables ou non).
Vous pouvez ensuite exécuter des instructions d'insertion qui l'incluent ou non, malgré le fait col3
n'est pas nullable :
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Les résultats sont :
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Si le déclencheur n'était pas là, vous pourriez avoir une erreur en essayant d'exécuter cette première instruction d'insertion, vous indiquant qu'il ne pouvait pas insérer NULL dans col3
.
Notez également que la deuxième instruction d'insertion qui spécifie une valeur n'a pas été remplacée par l'addition, comme demandé.
Voici un SQL Fiddle .