sql >> Base de Datos >  >> RDS >> Sqlserver

¿La ejecución de procedimientos almacenados de T-SQL es 'atómica'?

Esto es para SQL Server.

Cada declaración es atómica, pero si desea que el procedimiento almacenado sea atómico (o cualquier secuencia de declaraciones en general), debe rodear explícitamente las declaraciones con

COMENZAR TRANSACCIÓN
Declaración...
Declaración...
COMMITIR TRANSACCIÓN

(Es común usar BEGIN TRAN y END TRAN para abreviar).

Por supuesto, hay muchas maneras de tener problemas de bloqueo dependiendo de qué más esté sucediendo al mismo tiempo, por lo que es posible que necesite una estrategia para lidiar con las transacciones fallidas. (Una discusión completa de todas las circunstancias que pueden resultar en bloqueos, sin importar cómo idee este SP en particular, está más allá del alcance de la pregunta). Pero aún se podrán volver a enviar debido a la atomicidad. Y en mi experiencia, probablemente estará bien, sin saber acerca de sus volúmenes de transacciones y otras actividades en la base de datos. Disculpe por decir lo obvio.

Contrariamente a un concepto erróneo popular, esto funcionará en su caso con la configuración de nivel de transacción predeterminada.