Вопрос об @@Error в ХП

VladislavVV

Здравствуйтеесть ХП
CREATE PROCEDURE [dbo].[up_myfunnyProc]
 @actionResult int OUTPUT
as
 begin
 SET @actionResult = <b>0</b>

 BEGIN TRANSACTION 
 --...
 --какие-то манипуляции с данными
 --...
 SET @actionResult = @@ERROR
 IF @actionResult=<b>0</b>
 BEGIN
 EXEC [dbo].[up_myfunnyProc2] @param1, @param2
 END

 --результат операции
 IF @actionResult<><b>0</b>
 BEGIN
 ROLLBACK TRANSACTION
 END
 ELSE
 BEGIN
 COMMIT TRANSACTION
 END

 end --proc up_myfunnyProc
внимание, вопрос!если в процедуре up_myfunnyProc2 используется такой же код как и в up_myfunnyProc,
SET @actionResult = @@ERROR
то @@ERROR в каждой процедуре своя? эти @@ERROR'ы между собой не "пересекаются"? а то получится, что @@ERROR с up_myfunnyProc2 повлияет каким то образом на up_myfunnyProc
3 ответа

VladislavVV

Своя будет!Выдержка из BOL'а:
функция @@ERROR очищается и сбрасывается для каждой выполняемой инструкции


VladislavVV

Если не ошибаюсь еррор скидывает даже простое присвоение переменной значения...


VladislavVV

@@error обнуляется всегда!
declare @a int
set @a=<b>1</b>/<b>0</b>
select @@error
select @@error
результат:81340
@@version