SQL Try Catch точные ошибки, вызванные недавними переменными - PullRequest
1 голос
/ 01 ноября 2010

Запрос:

   BEGIN TRY
     SELECT @AccountNumber,
            @AccountSuffix,
            @Sedat,
            @Dedo,
            @Payalo,
            @Artisto
   FROM SWORDBROS
    WHERE AMAZING ='HAPPENS'

    END TRY
    EGIN CATCH
       Print @Sedat
    END CATCH

Как я могу получить @Sedat, возможно ли это?SQL 2005, это будет в SP

Ответы [ 4 ]

3 голосов
/ 01 ноября 2010

Как это, нет?

BEGIN TRY
    SELECT @AccountNumber,
        @AccountSuffix,
        @Sedat,
        @Dedo,
        @Payalo,
        @Artisto
    FROM SWORDBROS
    WHERE AMAZING ='HAPPENS'

END TRY
BEGIN CATCH
   --error handling only
END CATCH

--There is no finally block like .net
Print @Sedat
1 голос
/ 01 ноября 2010

В процедуре, когда я хочу перехватить точные значения, вызвавшие ошибку, это то, что я делаю. Я объявляю переменную таблицы (очень важной должна быть переменная таблицы, а не временная таблица), в которой есть поля, информацию о которых я хочу получить. Я заполняю переменную таблицы записями на ходу. В многоэтапном процессе я добавил бы одну запись для каждого шага, если бы я хотел видеть процесс who или только запись, если я столкнулся с ошибкой (которую я обычно заполнял в этом случае в блоке catch). Затем в блоке catch я выполнял откат транзакции, а затем вставлял содержимое таблицы varaible в таблицу обработки постоянных исключений. Вы также можете просто выбрать эту таблицу, если хотите, но если я собираюсь решить эту большую проблему, то это обычно для автоматизированного процесса, где я должен иметь возможность исследовать проблему позже, а не видеть проблему когда он попадает, потому что я не запускаю его на своем mchine или где я мог видеть оператор выбора или печати. Используя таблицу varaible, которая остается в области действия даже после отката, моя информация все еще доступна для меня, чтобы войти в мою таблицу регистрации исключений. Но важно, чтобы вы выполняли запись в любую постоянную таблицу после отката, иначе процесс откатится со всем остальным.

0 голосов
/ 01 ноября 2010

Не ясно, ожидаете ли вы, что возвращаемые значения будут помещены в переменные @ или вы пытаетесь динамически указать, какие столбцы вы хотите выбрать. В хранимой процедуре Sql Server вы обычно возвращаете набор результатов, а не набор отдельных переменных. Синтаксис, который вы используете, не будет работать, если вы хотите, чтобы значения столбцов возвращались, поскольку то, что у вас есть, будет динамически определять, какие столбцы требуются, основываясь на именах столбцов, передаваемых в хранимую процедуру. И это не будет работать, поскольку хранимая процедура должна знать, какие столбцы вы собираетесь использовать, когда она анализируется и хранится. Теперь условие исключений будет сработать, если возникнет проблема с чтением из базы данных (обрыв связи, ошибка диска и т. Д.), И в этом случае ни одно из значений столбца не будет известно.

Используйте инструмент Sql Query Analyzer (в меню «Инструменты» в SqlManager после выбора базы данных), чтобы определить свою хранимую процедуру и протестировать ее. Если вы установили документацию при установке SqlManager, перейдите в «Пуск»> «Программы»> Microsoft Sql Server> Books Online и откройте узел «Transact-SQL Reference» для получения документации о том, что можно сделать.

0 голосов
/ 01 ноября 2010

какую базу данных вы используете?Кроме того, какой язык программирования это?

обычно будет предложение INTO и объявлены некоторые локальные переменные.

Ваш запрос также должен содержать предложение FROM как минимум

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...