create procedure p1
@para int
as
declare @a table(a int)
insert into @a values (@para)
return @a
gocreate procedure p2
@para int
as
declare @b table(b int)
declare @sql nvarchar(4000),@proce_name varchar(40)set @proce_name = 'p1'
set @sql = @proce_name + ' ''' + @para + ''''
exec(@b= @sql) //这里怎么写才能使@b获取存储过程p1的返回值
goexec p2

解决方案 »

  1.   


    存储过程如果要返回一个表。需要这样改。
    create   procedure   p1 
    @para   int
    as 
    declare   @a   table(a   int) 
    insert   into   @a   values   (@para) 
    select * from @a
    go 不过楼主的第二个存储过程确实让人看不懂。估计语法都通不过,第一个存储过程写的也没有什么实际意义,楼主想寻求帮助,还是把需求贴出来吧。。
      

  2.   

    sql里不是没数组,所以我再p1里要生成一个数组只好用表变量,这个表变量作为p1的返回值要付给p2里的一个表变量,过程就是这样..请大家指教
      

  3.   

    --动态sql的返回值declare @TransactorID int
    set @TransactorID=0
    print(@TransactorID)
    exec sp_executesql N'select @TransactorID=5 ',N'@TransactorID int out ',@TransactorID out 
    print(@TransactorID)
      

  4.   

    create   procedure   p1 
    @para   int 
    as 
    insert into  @a   values   (@para) 
    select * from  @a 
    go create   procedure   p2 
    @para   int 
    as 
    create table #(b   int) 
    declare   @sql   nvarchar(4000),@proce_name   varchar(40) set   @proce_name   =   'p1 ' 
    set   @sql   = 'insert into # exec '+  @proce_name   +   ''''   +   @para   +   '''' 
    exec(@sql)   //这里怎么写才能使@b获取存储过程p1的返回值 
    select * from #go exec   p2
      

  5.   

    create   procedure   p1 
    @para   int 
    as 
    insert into  @a   values   (@para) 
    select * from  @a 
    go create   procedure   p2 
    @para   int 
    as 
    select 1 as id into #  
    declare   @sql   nvarchar(4000),@proce_name   varchar(40) set   @proce_name   =   'p1 ' 
    set   @sql   = 'insert into # exec '+  @proce_name   +   ''''   +   @para   +   '''' 
    exec(@sql)   //这里怎么写才能使@b获取存储过程p1的返回值 
    select * from #go exec   p2
      

  6.   

    google了下,确实不能直接传递表变量.
    但是 happyflystone 临时表可行.除了速度慢点.换个变通方式倒可以了,再次谢谢大家.