Đây là kết quả của bạn, tôi đang chứng minh điều này bằng một lược đồ mẫu vì bạn chưa cung cấp tên bảng / cột thực của mình.
Bảng:
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
)
Đây là định nghĩa về trình kích hoạt:
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
Về cơ bản, nó thay thế bất kỳ câu lệnh chèn nào được thực hiện trên bảng bằng câu lệnh trong trình kích hoạt, vì vậy tôi kiểm tra bằng cách sử dụng inserted
bảng tạm thời để xem liệu giá trị đang cố gắng chèn vào cột tùy chọn không thể nullable của chúng tôi, col3
, là NULL. Nếu có, tôi thay thế nó bằng việc bổ sung col1
và col2
(Tôi đang kết hợp với số 0 như bạn đã không đề cập đến liệu hai cột nguồn có thể rỗng hay không).
Sau đó, bạn có thể chạy các câu lệnh chèn có bao gồm nó hoặc không, mặc dù thực tế là col3
không thể nullable:
INSERT INTO test(col1,col2)
SELECT 12, 31
GO
INSERT INTO test(col1, col2, col3)
SELECT 1, 2, 89
GO
Kết quả là:
ID COL1 COL2 COL3
------------------
1 12 31 43
2 1 2 89
Nếu trình kích hoạt không có ở đó, bạn có thể đã gặp lỗi khi cố chạy câu lệnh chèn đầu tiên đó, cho bạn biết rằng nó không thể chèn NULL vào col3
.
Cũng lưu ý rằng câu lệnh chèn thứ hai chỉ định một giá trị không được thay thế bằng phần bổ sung, như được yêu cầu.
Đây là SQL Fiddle đang hoạt động .