Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Gabungkan data menjadi dua tabel tujuan

Secara teoritis, harus ada solusi untuk melakukan ini dalam satu pernyataan, tetapi sejauh ini saya gagal menemukannya. *

Inilah cara melakukannya dengan dua MERGE pernyataan:

WITH CTE_trgt AS 
(
    SELECT c.compid, c.ownerid, t.projid, t.active 
    FROM component c
    INNER JOIN trace t ON c.compid = t.compid
)
MERGE CTE_trgt t
USING Donor s
ON t.projid = s.projid
WHEN NOT MATCHED BY TARGET
    THEN INSERT (ownerid)
    VALUES (s.ownerid)
OUTPUT
    INSERTED.compid, s.projid, 1 INTO trace;


MERGE trace t
USING Donor s
ON t.projid = s.projid
WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE SET t.active = 0;

SQLFiddle DEMO

*Bagian dengan memperbarui kolom Aktif:

WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE SET t.active = 0

harus dapat masuk ke kueri atas dengan membuat pernyataan gabungan tunggal untuk semua operasi, tetapi menimbulkan kesalahan:

bahkan jika itu jelas satu kolom, dan pembaruan non-gabungan reguler berfungsi dengan baik . Mungkin seseorang mengetahui alasan dan/atau solusi untuk ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengecualikan catatan dengan nilai tertentu di sql pilih

  2. Bagaimana memilih beberapa kolom tertentu dari tabel jika tabel memiliki lebih dari 100 kolom

  3. Cara mendapatkan nilai kolom dalam satu nilai yang dipisahkan koma

  4. Memahami Pemantauan Kinerja SQL Server Berbasis Cloud

  5. Bagaimana cara menyimpan catatan sejarah dalam tabel sejarah di SQL Server