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

Tôi có thể sử dụng câu lệnh MERGE trong SQL Server 2005 không?

MERGE đã được giới thiệu trong SQL Server 2008. Nếu bạn muốn sử dụng cú pháp đó, bạn cần phải nâng cấp.

Nếu không, cách tiếp cận điển hình sẽ phụ thuộc vào nguồn dữ liệu từ đâu. Nếu đó chỉ là một hàng và bạn không biết mình cần cập nhật hay chèn thêm, bạn có thể làm:

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Nếu nguồn của bạn là bảng #temp, biến bảng, TVP hoặc bảng khác, bạn có thể thực hiện:

UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);

Như với MERGE (và như Michael Swart đã trình bày ở đây ), bạn sẽ vẫn muốn bao quanh bất kỳ phương pháp nào trong số này với các giao dịch thích hợp, xử lý lỗi và mức độ cô lập để hoạt động như một hoạt động thực sự, đơn lẻ. Ngay cả một MERGE tuyên bố không bảo vệ bạn khỏi sự đồng thời.

Tôi đã xuất bản một số các cảnh báo khác về MERGE trong chi tiết hơn tại đây .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ lưu trữ ngày trong SQL Server 2005

  2. tự động hóa truy vấn SQL để chạy hàng tháng

  3. Độ dài tên cơ sở dữ liệu tối đa trong SQL Server

  4. truy vấn duy nhất để xóa khỏi nhiều bảng trong máy chủ sql

  5. Cập nhật và nối thêm trừ khi trống