SQL Server 2005 - ERROR_MESSAGE () nicht vollständige Meldung zeigt
-
03-07-2019 - |
Frage
Ich habe einen Backup-Datenbank-Befehl in einem Try / Catch verkapselte und es scheint, dass die Fehlermeldung irgendwo verloren geht. Zum Beispiel:
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
.. gibt Fehler:
konnte nicht gefunden werden Eintrag in sysdatabases für Datenbank 'NonExistantDB'. Kein Eintrag mit diesem Namen gefunden. Stellen Sie sicher, dass der Name richtig eingegeben wurde. BACKUP DATABASE wird nicht normal beendet.
Während:
BEGIN TRY
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
... nur gibt Fehler. BACKUP DATABASE wird nicht normal beendet
Gibt es eine Möglichkeit die vollständige Fehlermeldung zu erhalten, oder ist dies eine Einschränkung der try / catch?
Lösung
Es ist eine Einschränkung der try / catch.
Wenn Sie schauen genau auf den Fehler erzeugt durch das Ausführen
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
Sie werden feststellen, dass es zwei Fehler, die geworfen bekommen. Die erste ist msg 911, in dem es heißt
kann nicht Eintrag in sysdatabases für Datenbank 'NonExistantDB' suchen. Kein Einlass mit diesem Namen gefunden. Stellen Sie sicher, dass der Name richtig eingegeben wurde.
Die zweite ist die 3013-Nachricht, die Sie anzeigen. Grundsätzlich ist SQL nur den letzten Fehler zurück.
Andere Tipps
Es ist eine Einschränkung, dass ich in mich gerade lief, der try / catch-Block in SQL 2005. Ich weiß nicht, ob es noch im Jahr 2008 oder nicht vorhanden ist.