SQL Server 2005 – Error_Message() не показывает полное сообщение

Я инкапсулировал команду резервного копирования базы данных в Try/Catch, и кажется, что сообщение об ошибке где-то теряется. Например:

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

..выдает ошибку:
Не удалось найти запись в sysdatabases для базы данных "NonExistantDB". Записи с таким именем не найдены. Убедитесь, что имя введено правильно. BACKUP DATABASE аварийно завершает работу.

Тогда как:

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

... выдает только ошибку: BACKUP DATABASE аварийно завершает работу.

Есть ли способ получить полное сообщение об ошибке или это ограничение try/catch?


person HAdes    schedule 21.10.2008    source источник


Ответы (2)


Это ограничение try/catch.

Если вы внимательно посмотрите на ошибку, возникающую при выполнении

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

вы обнаружите, что возникают две ошибки. Первый — это сообщение 911, в котором говорится

Не удалось найти запись в sysdatabases для базы данных NonExistantDB. Записи с таким именем не найдены. Убедитесь, что имя введено правильно.

Второе — это сообщение 3013, которое вы отображаете. По сути, SQL возвращает только последнюю ошибку.

person Josef    schedule 21.10.2008
comment
Похоже на ваше право, но не на ограничение try/catch. Я только что запустил его, используя @@ERROR, и это также возвращает только последнюю ошибку. не msg 911. Так как, черт возьми, мы должны получить 1-ю ошибку или все ошибки. - person HAdes; 21.10.2008

Это ограничение, с которым я только что столкнулся, блока try/catch в SQL 2005. Я не знаю, существует ли оно еще или нет в 2008 году.

Обработка ошибок SQL 2005

person joshlrogers    schedule 06.07.2010