Là một phần của MERGE
truy vấn mà tôi muốn chạy, tôi muốn xác nhận trong thời gian chạy mà một điều kiện nhất định giữ. Khi MERGE
tìm thấy một -match tôi muốn cập nhật một cột nhất định và thực hiện logic sau:
- Nếu cột mục tiêu là
NULL
, hãy viết giá trị nguồn - Nếu mục tiêu là
NOT NULL
, khẳng định rằng mục tiêu và nguồn giống hệt nhau
Tôi hy vọng rằng hai giá trị luôn giống nhau trong trường hợp 2 nhưng tôi có thể đã mắc lỗi (có lỗi). Khi điều đó xảy ra, tôi muốn phá vỡ tuyên bố và để ứng dụng của tôi báo cáo lỗi. Đây là một tình trạng lỗi rất hiếm gặp, không phải là điều có thể xảy ra như là một phần của xử lý thông thường.
Vì vậy, tôi đã nghĩ rằng tôi có thể lạm dụng một ngoại lệ chia cho 0 để gây ra sự cố:
MERGE
...
WHEN MATCHED BY TARGET THEN UPDATE SET
TargetCol = CASE
WHEN TargetCol IS NULL THEN SourceCol
WHEN TargetCol = SourceCol THEN SourceCol
ELSE 0/0 END --crash!
Công việc này sẽ đáng tin cậy? Có một lý do này không nên được thực hiện?
CHECK
ràng buộc trên OUTPUT
bảng mục tiêu ? Điều đó sẽ làm nổ tung tuyên bố.
RAISEERROR
có thể là một lựa chọn tốt nếu bạn muốn khẳng định trong một truy vấn.