sql >> Database teknologi >  >> RDS >> Sqlserver

Flet data til to destinationstabeller

Teoretisk set burde der være en løsning til at gøre dette i en enkelt erklæring, men det er indtil videre ikke lykkedes mig at finde den. *

Her er hvordan det kan gøres med to MERGE udsagn:

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

*Del med opdatering af Aktiv kolonne:

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

bør være i stand til at passe ind i den øverste forespørgsel og skabe en single merge statement for alle operationer, men det giver en fejl:

selvom det åbenlyst er en enkelt kolonne, og almindelig ikke-fletningsopdatering fungerer fint . Måske kender nogen en årsag og/eller en løsning på dette.




  1. Vælg den mest almindelige værdi fra et felt i MySQL

  2. Vælg en sekvens mellem to tal på MySQL

  3. Brug af UDF som standardværdi for en kolonne

  4. Undslip citat i HQL-forespørgsel