try this,
--建存储过程1
create proc PROC1
(@p11 nvarchar(50),
@p12 nvarchar(50) output)
as
begin
select @p12=@p11+N' from PROC1.'
end
--建存储过程2
create proc PROC2
(@p21 nvarchar(50),
@p22 nvarchar(50) output)
as
begin
select @p22=@p21+N' from PROC2.'
end
--建存储过程N
create proc PROCN
(@pn1 nvarchar(50),
@pn2 nvarchar(50) output)
as
begin
select @pn2=@pn1+N' from PROCN.'
end
--建存储过程MAINPROC
alter proc MAINPROC
(@PROC_NAME nvarchar(50),
@PARM1 nvarchar(50),
@PARM2 nvarchar(50) output)
as
begin
declare @tsql nvarchar(4000)
select b.name,b.is_output
into #t
from sys.objects a
inner join sys.parameters b on a.object_id=b.object_id
where a.type='P' and a.name=@PROC_NAME
select @tsql=N'exec '+@PROC_NAME+N' '
+(select top 1 name from #t where is_output=0)+N'=@a1,'
+(select top 1 name from #t where is_output=1)+N'=@a2 output'
exec sp_executesql @tsql,N'@a1 nvarchar(50),@a2 nvarchar(50) output',@a1=@PARM1,@a2=@PARM2 output
end
-- 测试1,调用PROC2
declare @y nvarchar(50)
exec MAINPROC @PROC_NAME=N'PROC2',@PARM1=N'测试1',@PARM2=@y output
select @y 'y'
/*
y
--------------------------------------------------
测试1 from PROC2.
(1 row(s) affected)
*/
-- 测试2,调用PROCN
declare @y nvarchar(50)
exec MAINPROC @PROC_NAME=N'PROCN',@PARM1=N'唐诗三百首',@PARM2=@y output
select @y 'y'
/*
y
--------------------------------------------------
唐诗三百首 from PROCN.
(1 row(s) affected)
*/
-- 测试3,调用PROC1
declare @y nvarchar(50)
exec MAINPROC @PROC_NAME=N'PROC1',@PARM1=N'pililaolang',@PARM2=@y output
select @y 'y'
/*
y
--------------------------------------------------
pililaolang from PROC1.
(1 row(s) affected)
*/