SQL Server 2005 - Error_Message () ne pas afficher le message complet
-
03-07-2019 - |
Question
J'ai encapsulé une commande de sauvegarde de base de données dans Try / Catch et il semble que le message d'erreur soit perdu quelque part. Par exemple:
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
.. donne une erreur:
Impossible de localiser l'entrée dans les sysdatabases pour la base de données 'NonExistantDB'. Aucune entrée trouvée avec ce nom. Assurez-vous que le nom est entré correctement. La sauvegarde de la base de données se termine de manière anormale.
Attendu que:
BEGIN TRY
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
... donne uniquement une erreur: La base de données de sauvegarde se termine de manière anormale.
Existe-t-il un moyen d'obtenir le message d'erreur complet ou s'agit-il d'une limitation de try / catch?
La solution
C'est une limitation de try / catch.
Si vous regardez attentivement l'erreur générée en exécutant
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
vous constaterez que deux erreurs sont générées. Le premier est msg 911, qui indique
Impossible de localiser l'entrée dans les sysdatabases pour la base de données 'NonExistantDB'. Entrée interdite trouvé avec ce nom. Assurez-vous que le nom est entré correctement.
Le second est le message 3013 que vous affichez. En gros, SQL ne retourne que la dernière erreur.
Autres conseils
C’est une limitation que je viens de rencontrer par moi-même du bloc try / catch en SQL 2005. Je ne sais pas s’il existe encore ou non en 2008.