2009-03-05 10 views
2

Ich möchte UPDATE-Befehl über eine Gruppe von Datensätzen ausführen, aber es schlägt fehl, da einige Datensätze nach der Aktualisierung eine Tabelleneinschränkung verletzen würde. Ist es möglich, nur passende Aufzeichnungen irgendwie zu aktualisieren?Teil UPDATE-Befehl

Antwort

5

Verhalten von Update als alles oder nichts ist von Entwurf

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

Wie wäre es tun das Update Zeile für Zeile mit einer Cursor- oder CLR-Schleife?

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 trifft

Die CSLA framework hat einige Leckereien für diese

5

Die Update-Anweisung ist selbst atomar, es wird entweder alles gelingen oder alle fehlschlagen. Sie müssen die SQL ändern, um nur die Zeilen zu aktualisieren, bei denen die Einschränkung nicht verletzt wird.

3

Sie müssen die Einschränkungen zur WHERE-Klausel hinzufügen.

Entweder das oder führen Sie das Update separat für jede Zeile, aber das scheint nicht eine gute Idee überhaupt.

0

Um zu einigen der bereits geposteten Antworten hinzuzufügen: Möglicherweise müssen Sie eine Unterabfrage in der WHERE-Klausel verwenden. Wie (im Pseudo-Code)

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 eingeben, kann ich Ihnen vielleicht mehr helfen.