web-dev-qa-db-fra.com

Comment définir l'auto-validation dans une session SQL Server?

Comment définir l'auto-validation dans une session SQL Server?

61
hawkeye

Vous pouvez activer autocommit en activant implicit_transactions:

SET IMPLICIT_TRANSACTIONS OFF

Lorsque le paramètre est activé, il revient au mode de transaction implicite. En mode de transaction implicite, chaque modification que vous apportez lance une transaction que vous devez valider manuellement.

Peut-être qu'un exemple est plus clair. Ceci écrira un changement dans la base de données:

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

Cela n'écrira pas de changement dans la base de données:

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

L'exemple suivant met à jour une ligne, puis se plaint de l'absence de transaction à valider:

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

Comme Mitch Wheat l'a dit, autocommit est la valeur par défaut pour Sql Server 2000 et versions ultérieures.

80
Andomar

Je voulais un moyen plus permanent et plus rapide. Parce que j'ai tendance à oublier d'ajouter des lignes supplémentaires avant d'écrire mes requêtes réelles de mise à jour/insertion.

Je l'ai fait en cochant la case SET IMPLICIT_TRANSACTIONS dans Options. Pour accéder aux options, sélectionnez Outils> Options> Exécution de la requête> SQL Server> ANSI dans votre Microsoft SQL Server Management Studio.

Assurez-vous simplement d’exécuter commit ou rollback après avoir exécuté vos requêtes. Sinon, la table sur laquelle vous auriez exécuté la requête sera verrouillée pour les autres.

46
Watt

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

Réf: Transactions Autocommit

8
Mitch Wheat

Avec SQLServer 2005 Express, j’ai constaté que même avec autocommit off, les insertions dans une table Db étaient validées sans que je n’émette de commande de validation à partir de la session Management Studio. La seule différence était que, lorsque autocommit était désactivé, je pouvais annuler toutes les insertions; avec * autocommit activé , je ne pouvais pas. * En fait, je me suis trompé. Lorsque le mode autocommit est désactivé, je ne vois les modifications que dans le QA (Query Analyzer ) fenêtre à partir de laquelle les commandes ont été émises. Si j’ai ouvert une nouvelle fenêtre QA (Query Analyzer), je ne vois pas les modifications apportées par la première fenêtre (session), c’est-à-dire qu’elles ne sont PAS validées! J'ai dû émettre des commandes de validation ou d'annulation explicites pour que les modifications soient visibles pour les autres sessions (fenêtres d'assurance qualité) - mon mauvais! Les choses fonctionnent correctement.

2
Raj