Hinzufügen einer where-Bedingung zu SQL server Merge-statement für Delete

MERGE DestinationTable AS D USING @SourceTable AS S ON D.Alternate_ID = S._ID WHEN MATCHED AND ( D.Candidate_ID <> S.Candidate_ID OR ISNULL(D.Vacancy_ID,'') <> S.Vacancy_ID ) THEN UPDATE SET D.FName = S.FName, D.Department = S.Department, WHEN NOT MATCHED BY TARGET THEN INSERT ( Alternate_ID, FName, Department ) VALUES ( S.ID, S.FName, S.Department ) WHEN NOT MATCHED BY SOURCE --How to add a where clause to the delete statement here THEN DELETE; --Eg WHERE D.Department <> 'HR' 

Ich benutze die Merge-statement oben, um datasätze in der DestinationTable zu löschen, wenn sie aus der Quelle entfernt wurden

Weiß jemand, wie man eine WHERE-Bedingung der Delete-statement hinzufügen kann ?. Ich möchte nur aus dem Ziel löschen, wo ColA gleich einer bestimmten konstanten characterfolge ist.

   

Ja, siehe MSDN Artikel für MERGE .

 [ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ] THEN <merge_matched> ] [ ...n ] 

Hier ist die Dokumentation auf den NOT MATCHED BY SOURCE Teil Ihrer Abfrage angewendet (vorausgesetzt, CoIA ist eine Spalte in der Zieltabelle):

 ... WHEN NOT MATCHED BY SOURCE AND D.CoIA = 'YourValue' THEN DELETE; 

Beachten Sie jedoch Folgendes:

Die MERGE-statement kann höchstens zwei WHEN NOT MATCHED DURCH SOURCE-Klauseln haben. Wenn zwei Klauseln angegeben sind, muss die erste Klausel von einer UND <clause_search_condition> -Klausel begleitet werden. Für jede gegebene Zeile wird die zweite WHEN NOT MATCHED BY SOURCE-Klausel nur angewendet, wenn das erste nicht ist. Wenn es zwei WHEN NOT MATCHED BY SOURCE-Klauseln gibt, dann muss man eine UPDATE-Aktion angeben und man muss eine DELETE-Aktion angeben. Nur Spalten aus der Zieltabelle können in <clause_search_condition> referenziert werden .