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

Ưu điểm của MERGE so với NẾU TỒN TẠI đơn giản là gì?

MERGE kết hợp logic INSERT, UPDATE và DELETE thành một câu lệnh DML, và do đó nó là nguyên tử. Nếu bạn đang làm UPSERTS một hàng thì lợi thế ít rõ ràng hơn. Ví dụ:việc triển khai một cách đơn giản UPSERT có thể trông giống như sau:

IF  EXISTS (SELECT * FROM t1 where [email protected])
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)

Tuy nhiên, nếu không gói điều này trong một giao dịch, có thể hàng mà chúng tôi sắp cập nhật sẽ bị xóa giữa CHỌN và CẬP NHẬT. Thêm logic tối thiểu để giải quyết vấn đề đó mang lại cho chúng tôi điều này:

BEGIN TRAN
IF  EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where [email protected] )
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)
COMMIT

Logic này không cần thiết với câu lệnh MERGE.

Không có sự so sánh nào nên được rút ra giữa CURSORS và câu lệnh MERGE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn máy chủ được liên kết động

  2. Ràng buộc khóa ngoại SQL DROP TABLE

  3. Khóa hàng, trang và bảng là gì? Và khi nào chúng được mua lại?

  4. Pivot động cần thiết với Row_Number ()

  5. Vô hiệu hoá Tài khoản SA trong SQL Server (Ví dụ T-SQL)