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

¿Las transacciones deben manejarse en .NET o SQL Server?

No existe una regla estricta y rápida, pero veo varias razones para controlar las transacciones desde el nivel comercial:

  • Comunicación a través de los límites del almacén de datos. Las transacciones no tienen que ser contra un RDBMS; pueden estar en contra de una variedad de entidades.

  • La capacidad de revertir/confirmar transacciones en función de la lógica comercial que puede no estar disponible para el procedimiento almacenado particular al que está llamando.

  • La capacidad de invocar un conjunto arbitrario de consultas dentro de una sola transacción. Esto también elimina la necesidad de preocuparse por el recuento de transacciones.

  • Preferencia personal:c# tiene una estructura más elegante para declarar transacciones:un using bloquear. En comparación, siempre he encontrado que las transacciones dentro de los procedimientos almacenados son engorrosas al pasar a revertir/confirmar.

Esto puede o no ser un problema dependiendo de cuántas transacciones se abran (no está claro si se trata de un solo trabajo o de un procedimiento que se ejecuta con alta simultaneidad). Sugeriría mirar qué bloqueos se colocan en los objetos y cuánto tiempo se mantienen esos bloqueos.

Tenga en cuenta que la validación posiblemente debería cerrar; ¿Qué pasa si los datos cambian entre el momento en que los validaste y el momento en que ocurre la acción?

Si es un problema, podría dividir el procedimiento infractor en dos procedimientos y llamar a uno desde fuera de un TransactionScope .