Manière correcte d'exécuter 2 commands SQL sans autre command s'exécutant entre

Le duplicata suggéré ne répond pas à la question dans le titre.

Je veux exécuter deux commands MSSQL sans aucun autre "user" (je ne sais pas quel est le bon terme) en exécutant une command entre eux.

En cherchant, j'ai trouvé deux façons qui semblaient atteindre ce but mais je ne suis pas sûr d'eux:

  1. Utilisez TABLOCK. – Mais j'ai vu que c'était considéré comme une mauvaise pratique.

  2. Utilisez une transaction – Mais tout ce que j'ai pu find, c'est que ce sera atomique, et pas nécessairement d'autres actions.

De quelle manière est la bonne façon?

Plus d'informations: Seul mon programme va accéder à la database, mais il peut provenir de plusieurs instances, et cela ne me dérange pas d'attendre – si une instance doit attendre une seconde ou deux – c'est bien.

EDIT: J'essaie d'insert une ligne et get son identité. (Il semble que ce ne soit pas aussi simple que je le pensais.)

Pour insert une ligne et get son identité, vous n'avez pas besoin de bloquer toutes les autres commands. Utilisez simplement une transaction en combinaison avec SCOPE_IDENTITY :

 BEGIN TRAN; INSERT INTO MyTable (MyColumn) VALUES ('MyValue'); SELECT SCOPE_IDENTITY(); COMMIT TRAN; 

Plus d'informations sur SCOPE_IDENTITY sur MSDN .

Vous devez utiliser une transaction avec un niveau d' isolation de Serializable . Cela empêchera les autres users de lire ou de modifier les lignes utilisées par la requête pendant la durée de la transaction sans bloquer complètement la table.

Vous ne pouvez pas empêcher l'exécution de commands entre deux autres commands. Tout ce que vous pouvez faire est d'empêcher la modification des données jusqu'à ce que vous ayez fini de les modifier vous-même. Ceci est fait en utilisant des transactions utilisant le niveau d'isolement respectif.