Encontré un artículo en MSDN Lbrary explicando que try/catch no maneja los errores lanzados cuando no se puede encontrar un objeto. Así que, aunque envuelvo una transacción en un try/catch, la frase retrotracción no ejecuta:manejo de errores de transacción cuando no existen objetos
BEGIN TRY
BEGIN TRANSACTION
SELECT 1 FROM dbo.TableDoesNotExists
PRINT ' Should not see this'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SELECT
ERROR_MESSAGE()
END CATCH
--PRINT 'Error Number before go: ' + CAST(@@Error AS VARCHAR)
go
PRINT 'Error Count After go: ' + CAST(@@Error AS VARCHAR)
PRINT 'Transaction Count ' + CAST(@@TRANCOUNT AS VARCHAR)
Cuál es la forma recomendada para manejar errores generados cuando no existe un objeto, especialmente cuando hay una transacción involucrados . ¿Debería insertar este código en lugar de las dos últimas instrucciones de impresión?
IF @@ERROR <> 0 AND @@TRANCOUNT > 0
BEGIN
PRINT 'Rolling back txn'
ROLLBACK TRANSACTION
END
go
PRINT 'Transaction Count again: ' + CAST(@@TRANCOUNT AS VARCHAR)
veces en entornos dinámicos, no se sabe el esquema precisa ; otro proceso puede estar cambiando la estructura de la base de datos, por lo que es esencial que el manejo de la excepción try/catch funcione normalmente. –
Punto justo. Sí, el manejo de prueba/captura debería funcionar correctamente pero no defendía la EM; Simplemente no estoy de acuerdo con este uso de una base de datos. – Tony
Tony, este escenario aparece en nuestro entorno de prueba y desarrollo en el que tenemos varios desarrolladores trabajando simultáneamente en los cambios que están realizando. Ahora bien, esta es una situación sobre la que no tengo control, así que no puedo cambiarla. Sin embargo, dado que pueden ocurrir cambios a los objetos en prueba, necesito poder manejar los errores generados por los objetos perdidos, y pensé que el mecanismo de prueba/captura debería ser capaz de manejar eso. Como no lo hago, estoy tratando de encontrar la mejor manera de usar las transacciones para que los cambios de los que soy responsable no terminen en un estado inconsistente. – gr928x