SQL Server 2005 - Error_Message () не показывает полное сообщение - PullRequest
2 голосов
/ 21 октября 2008

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

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

.. выдает ошибку:
Не удалось найти запись в системных базах данных для базы данных «NonExistantDB». Не найдено ни одной записи с таким именем. Убедитесь, что имя введено правильно. РЕЗЕРВНАЯ БАЗА ДАННЫХ завершается ненормально.

Принимая во внимание:

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 октября 2008

Это ограничение попытки / улова.

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

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

вы обнаружите две ошибки. Первым является сообщение 911, в котором говорится

Не удалось найти запись в базе данных sysdatabase для базы данных «NonExistantDB». Въезд запрещен нашел с этим именем. Убедитесь, что имя введено правильно.

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

0 голосов
/ 07 июля 2010

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

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

...