3 Stimmen

Delete Werte aus abhängigen Tabellen mithilfe von merge

Ich versuche, Zeilen aus einer Tabelle in Quell- und Ziel-DB-Tabellen abzugleichen. Ich kann die Zeile löschen, die in der Ziel-Tabelle vorhanden ist und nicht in der Quell-Tabelle vorhanden ist. Allerdings muss ich auch die davon abhängigen Zeilen in anderen Tabellen innerhalb der Ziel-DB löschen. Gibt es eine Möglichkeit, dies innerhalb eines Merge zu erreichen.

Die Merge-Anweisung sieht wie folgt aus.

MERGE Tabelle1 as [Ziel]

using (select  A,B,C,D,E,
F,G,H,I,J,K,L
from Source.dbo.Table1 as al
where al.H is null) AS [Quelle]

ON ([Ziel].A = [Quelle].B)

WHEN NOT MATCHED By TARGET THEN
    INSERT(C,D,E,F,G)
    VALUES([Quelle].C,[Quelle].D,[Quelle].E,[Quelle].F,[Quelle].G);
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

Siehe die folgende Abbildung.

 Source
DB0.dbo.Table1

ID  IDID    NAME
1   6   xyz
2   3   yzx
3   4   abc
4   5   lym
5   1   tes

Dest
 Table1
ID  IDID    Name
1   6   xyz
2   3   yzx
3   4   abc
4   5   lym
5   1   tes
6   2   ads

Dependent Table
 DB1.Dbo,Table2
IDID    VALUE
1   BST
2   PL
3   NO
4   SS
5   DR
6   CR
7   LM

Im Voraus vielen Dank.

3voto

Tyler Morrow Punkte 939

Verwenden Sie eine kaskadierende Löschung, wie von Nenad Zivkovic vorgeschlagen.

Hier sind ein paar relevante Links, die einige potenzielle Antworten liefern:

Wie man aus der Quelle mit dem Merge-Befehl löscht

Löschen von Zeilen aus mehreren Tabellen mit nur einer SQL-Abfrage

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X