Frage

Ich möchte UPDATE-Befehl über eine Gruppe von Datensätzen auszuführen, aber es funktioniert nicht, weil einige Datensätze nach dem Update würde eine Tabellenbedingung verstoßen. Ist es möglich, irgendwie nur geeignete Aufzeichnungen zu aktualisieren?

War es hilfreich?

Lösung

Verhalten von Update als alles oder nichts ist von Entwurf

Sie können hinzufügen Wo Klauseln zu Ihrem Update-Befehl alle Einschränkungen zu überprüfen, aber dies führt zu Code-Duplizierung, nicht eine gute Sache

Wie sei es das Update eine Zeile zu einem Zeitpunkt mit einem Cursor oder CLR Schleife tun?

Wenn dieser Teil einer mehrschichtigen Anwendung ist, dann ist dies, wenn Ihre Business-Objekte über Ihre SQL-Constraints über Meta-Daten oder Schema Abfrage wissen müssen, so dass die Datenüberprüfung durchgeführt werden kann, bevor es auf die Datenbank schlägt

Die CSLA Rahmen einige Goodies für diese hat

Andere Tipps

Die Update-Anweisung ist selbst atomar, wird es entweder alle Erfolg haben oder scheitern alle. Sie müssen die SQL ändern, dass nur die Zeilen zu aktualisieren, wenn die Einschränkung nicht verletzt werden.

Sie müssen die Einschränkungen der WHERE-Klausel hinzuzufügen.

Entweder das, oder das Update separat für jede Zeile laufen, aber dies scheint nicht wie eine gute Idee.

, um einige der Antworten Um bereits geschrieben: Sie eine Unterabfrage in der where-Klausel verwenden müssen. Wie (in Pseudocode)

update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)

Wenn Sie Code schreiben, ich könnte in der Lage sein, Ihnen mehr zu helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top