Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao tôi cần phần 'khớp' của hợp nhất SQL, trong trường hợp này?

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 đề OUTPUT đó mệnh đề cần tham chiếu đến cả dữ liệu mới được chèn 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 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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao số lần đọc logic cho các hàm tổng hợp trong cửa sổ lại cao như vậy?

  2. Truyền tham số kiểu 'đối tượng' trong tham số có giá trị bảng cho cột sql_variant

  3. Làm thế nào để kiểm tra kết quả công việc gói SSIS sau khi nó đã hoàn thành việc thực thi?

  4. SQL Server để đếm số lần một giá trị xuất hiện giữa nhiều phạm vi ngày và so sánh với các tuần trước đó

  5. Hiển thị các đối tượng cơ sở dữ liệu SQL Server dưới dạng tệp trong hệ thống tệp