Нет, это никогда не получит удар. Это легко продемонстрировать здесь:
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
.