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