Question

Comment définissez-vous autocommit dans une session SQL Server?

Était-ce utile?

La solution

Vous pouvez activer autocommit en réglant implicit_transactions OFF:

SET IMPLICIT_TRANSACTIONS OFF

Lorsque le réglage est activé, il retourne au mode de transaction implicite. En mode de transaction implicite, tous les changements que vous effectuez commence une transaction que vous devez engager manuellement.

Peut-être un exemple est plus claire. Cela rédigera une modification de la base de données:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION

Cela n'écrire une modification de la base de données:

SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

L'exemple suivant mettra à jour une ligne, puis se plaignent qu'il n'y a pas transaction à:

SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION

Comme Mitch blé dit, autocommit est la valeur par défaut pour SQL Server 2000 et plus.

Autres conseils

Je voulais une façon plus permanente et plus rapide. Parce que je tendance à oublier d'ajouter des lignes supplémentaires avant d'écrire ma mise à jour réelle / requêtes d'insertion.

Je l'ai fait en cochant SET IMPLICIT_TRANSACTIONS case à cocher dans le menu Options. Pour accéder à des options Sélectionnez Outils> Options> exécution de la requête> SQL Server> ANSI dans

Microsoft SQL Server Management Studio.

Assurez-vous d'exécuter commit ou rollback une fois que vous avez terminé l'exécution de vos requêtes. Dans le cas contraire, la table que vous auriez exécuter la requête sera verrouillé pour les autres.

Autocommit est le mode de gestion des transactions par défaut de SQL Server. (SQL 2000 et suivantes)

Ref: Autocommit Transactions

Avec SQL Server 2005 Express, ce que j'ai trouvé que même avec AutoCommit , des insertions dans une table Db ont été commis sans mon émission en fait une commande commit de la session Management Studio. La seule différence était, quand autocommit était au loin, je pouvais faire reculer toutes les insertions; avec * autocommit , je ne pouvais pas. * En fait, je me suis trompé. Avec le mode auto-validation, je vois les changements que dans la fenêtre QA (Analyseur de requêtes) à partir de laquelle les commandes ont été émises. Si je fis mon apparition d'une nouvelle QA (Analyseur de requêtes) fenêtre, je ne vois pas les modifications apportées par la première fenêtre (session), à savoir qu'ils ne sont pas engagés! Je devais publier explicitement ou commettras commandes rollback pour apporter des changements visibles à d'autres sessions (fenêtres QA) - mon mauvais! Les choses fonctionnent correctement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top