Domanda

Ho incapsulato un comando del database di backup in Try / Catch e sembra che il messaggio di errore si stia perdendo da qualche parte. Ad esempio:

BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'

..gives error:
Impossibile trovare la voce nei database di sistema per il database 'NonExistantDB'. Nessuna voce trovata con quel nome. Assicurarsi che il nome sia inserito correttamente. BACKUP DATABASE si sta chiudendo in modo anomalo.

considerando quanto segue:

BEGIN TRY
    BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
    PRINT ERROR_MESSAGE()
END CATCH

... restituisce solo un errore: BACKUP DATABASE termina in modo anomalo.

C'è un modo per ottenere il messaggio di errore completo o è una limitazione di try / catch?

È stato utile?

Soluzione

È una limitazione di try / catch.

Se osservi attentamente l'errore generato dall'esecuzione

 BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'

scoprirai che ci sono due errori che vengono generati. Il primo è il msg 911, che indica

  

Impossibile trovare la voce nei database di sistema per il database 'NonExistantDB'. Divieto di ingresso   trovato con quel nome. Assicurati che il nome sia inserito correttamente.

Il secondo è il messaggio 3013 che si sta visualizzando. Fondamentalmente, SQL restituisce solo l'ultimo errore.

Altri suggerimenti

È una limitazione, che mi sono appena imbattuto in me stesso, del blocco try / catch in SQL 2005. Non so se esiste ancora o meno nel 2008.

Gestione errori SQL 2005

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top