Bitte schön, ich demonstriere dies mit einem Beispielschema, da Sie Ihre echten Tabellen-/Spaltennamen nicht angegeben haben.
Tabelle:
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
)
Hier ist die Trigger-Definition:
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
Grundsätzlich ersetzt es jede Insert-Anweisung, die in der Tabelle ausgeführt wird, durch die im Trigger, also überprüfe ich mit dem inserted
temporäre Tabelle, um zu sehen, ob der Wert, der versucht, in unsere optionale Spalte ohne Nullwerte eingefügt zu werden, col3
, ist Null. Wenn ja, ersetze ich es durch den Zusatz col1
und col2
(Ich verschmelze mit Null, da Sie nicht erwähnt haben, ob die beiden Quellspalten nullable sind oder nicht).
Sie können dann Einfügeanweisungen ausführen, die es entweder enthalten oder nicht, trotz col3
ist nicht nullable:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Ergebnisse sind:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Wenn der Trigger nicht vorhanden war, könnten Sie beim Versuch, diese erste Einfügungsanweisung auszuführen, einen Fehler erhalten haben, der Ihnen mitteilt, dass NULL nicht in col3
eingefügt werden konnte .
Beachten Sie auch, dass die zweite Insert-Anweisung, die einen Wert angibt, nicht wie gewünscht durch den Zusatz ersetzt wurde.
Hier ist eine funktionierende SQL Fiddle .