SQL Server 2005 - Error_Message () non mostra il messaggio completo
-
03-07-2019 - |
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?
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.