SQL Server 2005 - Error_Message () no muestra el mensaje completo
-
03-07-2019 - |
Pregunta
Encapsulé un comando de base de datos de respaldo en un Try / Catch y parece que el mensaje de error se está perdiendo en algún lugar. Por ejemplo:
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
..gives error:
No se pudo encontrar la entrada en las bases de datos del sistema para la base de datos 'NonExistantDB'. No se encontró una búsqueda con ese nombre. Asegúrese de que el nombre se ha introducido correctamente. BACKUP DATABASE está finalizando de forma anormal.
Considerando que:
BEGIN TRY
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
... solo da error: BACKUP DATABASE está terminando de manera anormal.
¿Hay alguna forma de obtener el mensaje de error completo o es una limitación de try / catch?
Solución
Es una limitación de try / catch.
Si observa detenidamente el error generado al ejecutar
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
encontrará que hay dos errores que se generan. El primero es msg 911, que dice
No se pudo encontrar la entrada en sysdatabases para la base de datos 'NonExistantDB'. No hay entrada encontrado con ese nombre. Asegúrese de que el nombre se ingrese correctamente.
El segundo es el mensaje 3013 que está mostrando. Básicamente, SQL solo devuelve el último error.
Otros consejos
Es una limitación, simplemente me encontré con el bloque try / catch en SQL 2005. No sé si todavía existe o no en 2008.