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?

Était-ce utile?

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.

Traitement des erreurs SQL 2005

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top