Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zaktualizuj i wstaw do jednej tabeli z drugiej

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);

Wystąpiły pewne problemy z instrukcją Merge, więc należy jej używać z ostrożnie ..

Dalej zalecam używanie łączenia jako dwóch oddzielnych instrukcji DML, jak poniżej.

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

Powody podane przez Paula White'a tutaj w jego szczegółowej odpowiedzi ..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę uwierzytelnić się w SQL SERVER 2008 z użytkownikiem Active Directory, ale bez uwierzytelniania Windows?

  2. Co robi transakcja wokół pojedynczego wyciągu?

  3. Scal wartości wierszy w CSV (vel GROUP_CONCAT dla SQL Server)

  4. Zwróć jedną z dwóch kolumn w widoku — zależnie od tego, która z nich nie jest pusta

  5. Uprawnienie do odpytywania dbo.sysobjects