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?

¿Fue útil?

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.

Manejo de errores de SQL 2005

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top