Проверьте, будет ли EXEC ('SELECT ...') работать без ошибок, не возвращая результаты запроса - PullRequest
0 голосов
/ 25 октября 2019

Я хочу динамически построить запрос (который всегда будет оператором SELECT) внутри строковой переменной, передать его в качестве аргумента в EXEC (), а затем:

-Если оператор EXEC ()обнаруживает ошибку, перейдите к моей пользовательской обработке ошибок.

-В противном случае продолжайте, фактически не выбирая результаты на моей панели результатов (я буду делать это часто в рамках хранимой процедуры, поэтому панель будет легко загромождена).

Я попытался выполнить попытку / перехватить при включении и выключении NOEXEC, ожидая увидеть «Обнаружена ошибка деления на ноль», но вместо этого просто вижу «Команды успешно выполнены».

DECLARE @sql varchar(max)
SET @sql = 'SELECT 2 / 0;'

BEGIN TRY
    SET NOEXEC ON;
    EXEC(@sql)
    SET NOEXEC OFF;
END TRY
BEGIN CATCH
    PRINT('Zero division error encountered')
END CATCH

В основном я хочу воспользоваться преимуществом NOEXEC для уменьшения помех, но если в запросе возникает ошибка, я хочу ее обработать.

1 Ответ

0 голосов
/ 25 октября 2019

NOEXEC выполняет только компиляцию, но не выполняет. Разделение никогда не происходит.

Если вы хотите, чтобы произошло разделение, сделайте это -

Declare @ans int

BEGIN TRY
    Set @ans = 2 / 0
END TRY
BEGIN CATCH
    PRINT('Zero division error encountered')
END CATCH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...