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?

War es hilfreich?

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.

SQL 2005 Fehlerbehandlung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top