¿Se puede iniciar una transacción en un procedimiento almacenado y luego retrotraerlo o confirmarlo en un procedimiento anidado?¿Cómo uso las transacciones en múltiples procedimientos almacenados?
Respuesta
confirmar y deshacer tienen diferentes efectos
- COMMIT decrementos @@ TRANCOUNT
- ROLLBACK lo empuja de nuevo a cero
Esto sucede porque SQL Server en realidad no admite transacciones anidadas.
Si confirmar o deshacer en un procedimiento almacenado anidado (no transacción), entonces se generará el error 266 debido a una falta de coincidencia @@ TRANCOUNT en el arranque y la entrada
La cuestión de reversión puede ser resuelto mediante el uso de SET XACT_ABORT ON que es "auto rollback" (simplemente) y suprime el error 266.
El problema de la confirmación ... no se puede como tal. Sin embargo, puede controlar dónde sucede al anotar @@ TRANCOUNT en la entrada del proceso almacenado y confirmando solo si es cero.
Para el manejo de transacciones correcta, ver mis respuestas aquí, por favor: Nested stored procedures containing TRY CATCH ROLLBACK pattern? y Have I to count transactions before rollback one in catch block in T-SQL?
No puede confirmarlo en un procedimiento anidado, pero al iniciar una transacción se ajustarán todos los procedimientos anidados. Entonces la transacción es buena para todos los procedimientos almacenados anidados dentro de la transacción. En las transacciones distribuidas, la integridad de los datos incluso cruza los límites de la máquina.
http://msdn.microsoft.com/en-us/library/ms188929(v=SQL.90).aspx
Debe emparejar su COMENZAR TRAN y se compromete en la misma sproc
Si a continuación, llama a otro procedimiento almacenado que también tiene una transacción, con posterioridad COMENZAR TRAN/COMMIT pares Tran incrementar y disminuir @ @Trancount respectivamente.
La transacción se confirma en el 'último' COMMIT TRAN (@@ TRANCOUNT = 1)
Sin embargo, cualquier ROLLBACK siempre deshacer la transacción.
MSDN tiene una buena explicación.
Sí, es posible. Con lenguajes de programación como C#, cuando pasa la conexión y el objeto de transacción con el comando. si algo es tomado como incorrecto que revertir la transacción:
string customerConnection = "Connection";
string query = "insert into temp values ('Data2','data1','data2','data3')";
string query2 = "update tempcst set data = 'Hello data'";
SqlConnection myConnection = new SqlConnection(customerConnection);
myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction();
Try{
int result = executeNonQuery(query, myConnection, myTrans, "");
i = executeNonQuery(query2, myConnection, myTrans, "");
myTrans.Commit();}
catch{
myTrans.Rollback();
myConnection.Close();
}
- 1. Uso de procedimientos almacenados en rieles
- 2. ¿Realmente necesito usar transacciones en procedimientos almacenados? [MSSQL 2005]
- 3. ¿Cómo trata SQL Server las instrucciones dentro de los procedimientos almacenados con respecto a las transacciones?
- 4. ¿Los procedimientos almacenados bloquean las tablas/filas?
- 5. Entity Framework: ¿Cómo poner múltiples procedimientos almacenados en una transacción?
- 6. Procedimientos almacenados y funciones
- 7. Patrones para procedimientos almacenados?
- 8. Versiones de procedimientos almacenados
- 9. Funciones vs procedimientos almacenados
- 10. Expresiones regulares en procedimientos almacenados
- 11. procedimientos almacenados con sqlAlchemy
- 12. Tablas temporales en procedimientos almacenados
- 13. WebMatrix y procedimientos almacenados
- 14. Procedimientos almacenados Ingeniería inversa
- 15. Procedimientos almacenados vs. Vistas
- 16. MySQL: instrucciones IF/THEN en procedimientos almacenados
- 17. ¿Cómo usar variables locales en procedimientos almacenados?
- 18. Uso de procedimientos almacenados como capa de lógica de negocios
- 19. ¿Dónde está el mejor lugar para manejar transacciones en procedimientos almacenados o en la aplicación?
- 20. MySQL: Vistas vs Procedimientos almacenados
- 21. Procedimientos almacenados en Python para PostgreSQL
- 22. ¿El uso de procedimientos almacenados es una mala práctica?
- 23. encontrar todas las tablas no referenciadas en los procedimientos almacenados
- 24. Eliminar todos los procedimientos almacenados en MySQL o usar procedimientos almacenados temporales
- 25. Procedimientos almacenados en el marco de entidad
- 26. ¿Cómo puedo encontrar llamadas a procedimientos almacenados?
- 27. ¿Cómo encontrar los procedimientos almacenados por nombre?
- 28. MySQL: ¿Cómo modificar los procedimientos almacenados atómicamente?
- 29. consultas parametrizadas SIN procedimientos almacenados?
- 30. Procedimientos almacenados a archivos .sql