Kак сделать так, чтобы бнутренний SP всегда сделал commit, не смотря на то что главная процедура делает rollback

У меня есть три таблици

create table tbl1(id int identity, val nvarchar(50))
create table tbl2(id int identity, val nvarchar(50))
create table tbl3(id int identity, val nvarchar(50))

И есть две SP! proc_out и proc_in

create procedure proc_in
as
begin
    insert into tbl2(val)
    values ('test2')
end

create procedure proc_out
as
begin
   insert into tbl1(val)
   values('test1')

    exec proc_in

   insert into tbl3(val)
   values('test3')


    DECLARE @MessageText NVARCHAR(100);
    SET @MessageText = N'This is a raiserror %s';
    RAISERROR(@MessageText, 16, 1, N'MSG')
end

как мне написать proc_out, чтобы когда дал raiserror, proc_in rollback не сделал. я вызываю proc_out так

begin tran 
    declare @err int = 0
    exec @err = proc_out
if @ERR = 0 
    commit tran 
else 
    rollback tran

Ответы (0 шт):