Ich möchte vorhersagen können, ob ein DELETE auf eine Einschränkungsverletzung stößt, ohne das Löschen tatsächlich durchzuführen.
Welche Möglichkeiten habe ich dazu? Gibt es eine einfache Möglichkeit, einen "Trockenlauf" eines DELETE durchzuführen?
sql-server
sql-server-2008
sql-server-2005
Jay Sullivan
quelle
quelle
Antworten:
Wenn Sie alle Löschvorgänge nur dann verarbeiten möchten, wenn alle erfolgreich sind, verwenden Sie einfach TRY / CATCH:
Wenn das Ziel darin besteht, dass alle erfolgreichen Löschvorgänge erfolgreich sind, auch wenn einer oder mehrere fehlschlagen, können Sie einzelne TRY / CATCH verwenden, z
quelle
Eine Möglichkeit besteht darin, eine Transaktion zu starten, das Löschen auszuführen und dann immer ein Rollback durchzuführen:
quelle
Ich möchte die von Aaron Bertrand bereitgestellte Lösung mit etwas Code verbessern, falls Sie versuchen möchten, ein Element einer Tabelle hinzuzufügen, die Ausnahmen zu ignorieren, um Fehler zu ignorieren, oder den Prozess nach Fehlern zu stoppen.
Dieser wählt die Datensätze aus der Tabelle aus und versucht dann, sie ohne Ausnahmen zu löschen:
quelle