Frage

Vor ein paar Minuten, während der Arbeit eine neue sproc aus, ausgeführt ich die falsche Anweisung delete. So etwas wie folgt aus:

Delete From SomeTable Where SomeStatusID=1

10 Sekunden hinein, erkannte ich, dass ich im falschen Status getippt und Abbrechen getroffen. Es wird gesagt, dass die Anweisung abgebrochen wurde.

Ich habe ein in eine separate Datenbank zur Wiederherstellung der Tabelle zurück zu bekommen, die ich gerade vermutlich nuked, denken, dass da dies nicht einige Datensätze in einer Transaktion war wurden wahrscheinlich gelöscht.

Merkwürdig ist, waren die Aufzeichnungen alle intakt. Einfach nur neugierig, warum dies war - hat es die einzelne delete-Anweisung als eine Transaktion in diesem Fall zu behandeln, auch wenn es keine explizite Transaktion definiert war

War es hilfreich?

Lösung

Standardmäßig wird eine einzelne DML-Anweisung wird als eine Transaktion ausgeführt. Wenn die Anweisung erfolgreich ist, wird die Transaktion festgeschrieben. Wenn die Anweisung abgebrochen wird oder sonst ausfällt, wird die Transaktion zurückgerollt.

Dieses Verhalten ist in auf den Motor gebaut, und ist nicht auf Management Studio zusammen. Siehe Autocommit Transaktionen in der Dokumentation.

Andere Tipps

Es gibt immer Transaktionen. Das einzige, was sich ändert, ist, wie diese Transaktionen voneinander sind und dass im Management Studio möglicherweise nicht die Transaktion explizit definiert isoliert werden und wird automatisch verpflichtet, wenn die Abfrage abgeschlossen ist.

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