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