2 Stimmen

Ist es möglich, dass SQL Server eine falsche Anzahl von betroffenen Zeilen meldet?

Ich habe ein Dienstprogramm, das:

  1. holt Sql-Befehle aus einer flachen Textdatei
  2. führt sie sequentiell gegen SQL Server auf demselben Rechner aus
  3. und meldet einen Fehler, wenn sich ein UPDATE-Befehl auf NULL ZEILEN auswirkt (es sollte in dieser Datei niemals einen Update-Befehl geben, der sich nicht auf einen Datensatz auswirkt, daher wird er als Fehler aufgezeichnet)

Das Dienstprogramm protokolliert auch alle fehlgeschlagenen Befehle.

Die endgültigen Daten in der Datenbank scheinen jedoch falsch/veraltet zu sein, obwohl mein Dienstprogramm keine fehlgeschlagenen Aktualisierungen und keine fehlgeschlagenen Befehle meldet.

Ich weiß, dass der erste und offensichtlichste Schuldige eine Art Logik- oder Laufzeitfehler in meiner Programmierung des Dienstprogramms selbst ist, aber ich muss nur wissen, ob es theoretisch möglich ist, dass SQL Server meldet, dass mindestens eine Zeile betroffen war und dennoch die Änderung nicht angewendet wird.

Wenn es hilft, scheint das Dienstprogramm immer die gleiche Anzahl von Befehlen korrekt auszuführen und die endgültigen veralteten/falschen Daten sind immer die gleichen, d. h. es scheint eine bestimmte Anzahl von Befehlen korrekt auszuführen, die erfolgreich von der Datenbank abgefragt werden und dann fehlschlagen.

Gracias.

EDIT:

Ich sollte auch anmerken, dass dieses Dienstprogramm dieses Verhalten auf 4 verschiedenen Produktionsservern zeigt, die jeweils ihren eigenen dedizierten lokalen Datenbankserver haben, und dass es sich dabei um leistungsstarke Rechner mit jeweils 8-16 GB RAM handelt, die von einem professionellen Systemadministrator verwaltet werden.

8voto

gbn Punkte 407102

Nach dem, was Sie sagen...

Die Angabe "xx betroffene Zeilen" kann irreführend sein, wenn Sie einen Trigger auslösen. Möglicherweise lesen Sie die Anzahl aus dem Trigger. Wenn dies der Fall ist, fügen Sie SET NOCOUNT ON zum Trigger hinzu

Oder die Daten sind dieselben, so dass Sie eine Dummy-Aktualisierung mit denselben Werten durchführen. Fügen Sie eine WHERE-Klausel hinzu, um zum Beispiel auf Unterschiede zu testen.

4voto

Amy B Punkte 104656
BEGIN TRANSACTION

UPDATE MyTable
SET Message = ''
WHERE ID = 2

ROLLBACK TRANSACTION

Nachrichten:

(1 Zeile(n) betroffen)

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