sql >> Databáze >  >> RDS >> Sqlserver

Sloučit data do dvou cílových tabulek

Teoreticky by mělo existovat řešení, jak to udělat v jediném příkazu, ale zatím se mi ho nepodařilo najít. *

Zde je návod, jak to lze provést pomocí dvou MERGE prohlášení:

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

*Součástí aktualizace aktivního sloupce:

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

by se měl vejít do horního dotazu a vytvořit jednotný příkaz sloučení pro všechny operace, ale vyhodí chybu:

i když je to zjevně jeden sloupec a běžná aktualizace bez sloučení funguje dobře . Možná někdo zná důvod a/nebo řešení.




  1. Každý konkrétní den v týdnu, sql a php

  2. Průměrná doba odpovědi na zprávu

  3. Zkontrolujte, zda je IP adresa uložena v databázi

  4. Jak předat seznam ID uložené proceduře MySQL?