Ini dia, saya mendemonstrasikan ini dengan skema contoh karena Anda belum memberikan nama tabel/kolom yang sebenarnya.
Tabel:
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
)
Berikut adalah definisi pemicu:
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
Pada dasarnya ini menggantikan pernyataan penyisipan yang dilakukan di atas tabel dengan yang ada di pemicu, jadi saya memeriksa menggunakan inserted
tabel sementara untuk melihat apakah nilai yang mencoba dimasukkan ke dalam kolom opsional non-nullable kami, col3
, adalah NULL. Jika ya, saya ganti dengan penambahan col1
dan col2
(Saya menggabungkan dengan nol karena Anda tidak menyebutkan apakah dua kolom sumber dapat dibatalkan atau tidak).
Anda kemudian dapat menjalankan pernyataan penyisipan yang menyertakannya atau tidak, meskipun sebenarnya col3
tidak dapat dibatalkan:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Hasilnya adalah:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Jika pemicunya tidak ada, Anda bisa mendapatkan kesalahan saat mencoba menjalankan pernyataan penyisipan pertama, memberi tahu Anda bahwa itu tidak dapat memasukkan NULL ke col3
.
Perhatikan juga bahwa pernyataan penyisipan kedua yang menentukan nilai belum diganti dengan penambahan, seperti yang diminta.
Inilah SQL Fiddle yang berfungsi .