Имеет ли смысл использовать @@ error и try ... catch для обработки ошибок в sql server? - PullRequest
2 голосов
/ 30 марта 2012

Имеет ли смысл строка @error здесь? Будет ли это даже в случае ошибки? Что произойдет, если в блоке try будет несколько SQL-операторов, каждая из которых будет сопровождаться аналогичной проверкой?

begin try
    Select a,b from tableC where a > 3 and b < 2
    Set @error = @@error
    If @error <> 0 begin raiseerror("error",16,1)end
end try
begin catch
    select error_message()
end catch

1 Ответ

2 голосов
/ 30 марта 2012

Нет, это никогда не получит удар. Это легко продемонстрировать здесь:

DECLARE @error int
begin try
    Select 1/0
    Set @error = @@error
    If @error <> 0 
        begin raiserror('error',16,1)
        end
end try
begin catch
    select error_message()
end catch

SELECT @error

Я подозреваю, что кто-то обновил старый код, не понимая, что он делает.

@error будет установлен в 0 после каждого успешного оператора, но никогда не получит значение, назначенное в случае ошибки, так как оно будет обойдено TRY...CATCH.

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