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

Cập nhật và chèn vào một bảng từ một bảng khác

Merge table2 as target
using table1  as source
on
target.id=source.id
When matched 
Then
update 
set target.id=source.id,
    target.name=source.name
When not matched by Target Then
INSERT (id, name) VALUES (id, name);

Có một số vấn đề với câu lệnh Merge, vì vậy nó nên được sử dụng với thận trọng ..

Hơn nữa, tôi khuyên bạn nên sử dụng hợp nhất dưới dạng hai câu lệnh DML riêng biệt như bên dưới ..

insert into table2
select * from table1 t1 where not exists (select 1 from table2 t2 where t2.id=t1.id)

update t2
set 
t2.id=t1.id,
t2.name=t1.name
from 
table1 t1
join
table2 t2
on t1.id=t2.id

Lý do được nêu ra bởi Paul White tại đây trong câu trả lời chi tiết của anh ấ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. truy xuất phạm vi hàng cụ thể trong bảng SQL Server

  2. CHÈN SỐ LƯỢNG LỚN vào các cột cụ thể?

  3. Mã hóa dữ liệu cột với LINQ

  4. Chuyển đổi một ngày thành một múi giờ khác trong SQL Server

  5. Hiệu suất máy chủ SQL - Kiểm tra trong đám mây