Forma correcta de ejecutar 2 commands SQL sin ejecutar otro command en el medio

El duplicado sugerido no responde la pregunta en el título.

Quiero ejecutar dos commands MSSQL sin ningún otro "usuario" (no estoy seguro de cuál es el término correcto) ejecutando un command entre ellos.

Al search, he encontrado dos forms que parecen lograrlo, pero no estoy seguro de ellos:

  1. Use TABLOCK. – Pero he visto que se considera una mala práctica.

  2. Usa una transacción, pero todo lo que pude encontrar fue que será atómico y no necesariamente bloqueará otras acciones.

¿De qué manera es la correcta?

Más información: solo mi progtwig accederá a la database, pero podría ser de varias instancias, y no me importa una corta espera, si una instancia tendrá que esperar en línea por un segundo o dos, está bien.

EDITAR: Estoy tratando de insert una fila y get su identidad. (Parece que no es sencillo como era de esperar)

Para insert una fila y get su identidad, no necesita bloquear todos los demás commands. Solo use una transacción en combinación con SCOPE_IDENTITY :

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

Más sobre SCOPE_IDENTITY en MSDN .

Necesita utilizar una transacción con un IsolationLevel de Serializable . Eso evitará que otros usuarios lean o modifiquen las filas utilizadas por la consulta durante la transacción sin bloquear completamente la tabla.

No puede evitar que los commands se ejecuten entre otros dos commands. Todo lo que puede hacer es evitar que los datos se modifiquen hasta que haya terminado de modificarlos usted mismo. Esto se hace usando transactions usando el nivel de aislamiento respectivo.