Trong câu trả lời bạn đã liên kết đến trong nhận xét
, như tôi hy vọng đã nói rõ, chúng tôi đang lạm dụng MERGE tuyên bố.
Truy vấn bạn đã hiển thị ở đây có thể được thay thế bằng:
insert into T(Col1) select Col1 from T where ID = 123
Tuy nhiên, nếu bạn muốn có thể thêm OUTPUT mệnh đề
và OUTPUT đó mệnh đề cần tham chiếu đến cả dữ liệu mới được chèn và dữ liệu từ bảng nguồn, bạn không được phép viết mệnh đề như vậy trên INSERT tuyên bố.
Vì vậy, thay vào đó, chúng tôi sử dụng MERGE tuyên bố, nhưng không phải cho mục đích dự định của nó. Toàn bộ mục đích là buộc nó thực hiện INSERT và viết OUTPUT của chúng tôi mệnh đề.
Nếu chúng tôi kiểm tra tài liệu cho MERGE
, chúng tôi thấy rằng mệnh đề duy nhất mà chúng tôi có thể chỉ định để thực hiện INSERT nằm trong KHI CHƯA ĐỐI VỚI [THEO MỤC TIÊU] mệnh đề - trong cả WHEN MATCHED và KHI KHÔNG ĐƯỢC SO SÁNH THEO NGUỒN mệnh đề, tùy chọn duy nhất của chúng tôi là CẬP NHẬT hoặc DELETE .
Vì vậy, chúng ta phải viết MERGE sao cho kết hợp luôn không thành công - và cách đơn giản nhất để làm điều đó là nói rằng kết hợp sẽ xảy ra khi 1 =0 - hy vọng là không bao giờ.
Vì SQL Server không hỗ trợ boolean means