Wie legen Sie Autocommit in einer SQL Server-Sitzung fest?Wie legen Sie Autocommit in einer SQL Server-Sitzung fest?
Antwort
Sie können autocommit ON drehen, indem implicit_transactions OFF:
SET IMPLICIT_TRANSACTIONS OFF
Wenn die Einstellung eingeschaltet ist, kehrt sie zu impliziten Transaktionsmodus. Im impliziten Transaktionsmodus startet jede von Ihnen vorgenommene Änderung eine Transaktion, die Sie manuell committen müssen.
Vielleicht ist ein Beispiel klarer. Dadurch wird eine Änderung in der Datenbank schreiben:
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION
Dies wird nicht eine Änderung in die Datenbank schreiben:
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
Das folgende Beispiel eine Zeile aktualisieren, und dann beklagen, dass es keine Transaktion ist zu begehen :
SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
Wie Mitch Wheat sagte autocommit die Standardeinstellung für SQL Server 2000 ist und höher.
Autocommit ist der Standardtransaktionsverwaltungsmodus von SQL Server. (SQL 2000 an)
Ich wollte einen dauerhafteren und schnelleren Weg. Weil ich dazu tendiere zu vergessen, zusätzliche Zeilen hinzuzufügen, bevor ich meine eigentlichen Update/Insert-Abfragen schreibe.
Ich tat es durch Überprüfung SET IMPLICIT_TRANSACTIONS Check-Box von Optionen. Navigieren zu Optionen Wählen Sie Extras> Optionen> Abfrageausführung> SQL Server> ANSI in Ihrem Microsoft SQL Server Management Studio.
Stellen Sie sicher, dass Sie commit
oder rollback
ausführen, nachdem Sie Ihre Abfragen abgeschlossen haben. Andernfalls wird die Tabelle, für die Sie die Abfrage ausgeführt haben, für andere gesperrt.
Mit SQLServer 2005 Express, was ich fand war, dass sogar mit autocommit off, Einfügungen in eine Db-Tabelle wurden ohne meine tatsächlich einen Commit-Befehl aus der Management Studio-Sitzung ausgestellt. Der einzige Unterschied war, wenn Autocommit ausgeschaltet war, konnte ich alle Insertionen zurücksetzen; mit * autocommit auf, konnte ich nicht. * Eigentlich lag ich falsch. Wenn der Autocommit-Modus deaktiviert ist, werden die Änderungen nur im Fenster QA (Query Analyzer) angezeigt, in dem die Befehle ausgegeben wurden. Wenn ich ein neues QA (Query Analyzer) -Fenster platzierte, sehe ich nicht die vom ersten Fenster (Sitzung) vorgenommenen Änderungen, d. H. Sie sind NICHT festgeschrieben! Ich musste explizite Commit- oder Rollback-Befehle ausgeben, um Änderungen für andere Sitzungen (QA-Fenster) sichtbar zu machen - mein Fehler! Die Dinge funktionieren richtig.
Ich habe versucht und ich kann bestätigen, dass es scheint genau das gleiche wie SET IMPLICIT_TRANSACTIONS ON schreiben, da es scheint, die richtige Antwort in 24 Stunden werde ich mit dem Kopfgeld vergeben. – Revious