日期:2014-05-17  浏览次数:20575 次

存储过程调用存储过程返回字符串问题
我有两个存储过程A和B,
A是客户端新增数据到数据库的存储过程
B是生成流水号的存储过程

在A里有一个编号字段是NVARCHAR的,这个值需要从B存储过程返回,然后写入数据库

请位各位前辈要怎么调用?
------最佳解决方案--------------------
create proc pr_getstr(@str varchar(20)output)
as
begin
    set @str='0001';
end

declare @strs varchar(20)  
exec pr_getstr @strs output
print @strs
------其他解决方案--------------------
考虑到高并发,我不建议将生成流水号放到另一个存储过程中,还是在同一个存储过程中用一个事务控制。
如果一定要两个存储过程,那么在A里面执行:

set xact_abort on
begin transaction

declare @bianhao nvarchar(20)=''

exec B @bianhao output

insert into ...

commit transaction

存储过程B:

create proc B
@bianhao nvarchar(20) output
as
begin
    select @bianhao=max(bianhao+1) from tablebianhao with(tablock)
end

------其他解决方案--------------------
create proc P_A
as
begin
declare @A table(F nvarchar(20)) --b结果临时保存
insert into @A
exec P_B

insert into ....
end

------其他解决方案--------------------
在A中调用B,将B的结果先保存到一个变量中,然后再插入
------其他解决方案--------------------
用OUTPUT解决了,高并发问题已解决