create proc S
  @Where varchar(100)
as 
begin
Declare @TempTable table(Tid int)
declare @s varchar(1000)
set @s='insert into @TempTable(Tid) select top 10 i_id from tb_res '+@where
exec(@s)
select * from @TempTable
end

解决方案 »

  1.   

    --改
    create proc S
    @Where varchar(100)
    as 
    begin
    create table #TempTable(Tid int)
    declare @s varchar(1000)
    insert #TempTable(Tid)
    exec('select top 10 i_id from tb_res '+ @where)
    select * from #TempTable
    end
      

  2.   

    CREATE PROCEDURE S 
    @Where varchar(100)
    as 
    begin
    Declare @TempTable table(Tid int)
    declare @s varchar(1000)
    set @s='insert into @TempTable(Tid) select top 10 i_id from tb_res '+@where
    exec(@s)
    select * from @TempTable
    end這樣就可以啦
      

  3.   

    --对查询的结果集还有处理嘛,如果没有,直接输入就ok了!
    create proc S
      @Where varchar(100)
    as 
    begin
    declare @s varchar(1000)
    set @s='select top 10 i_id from tb_res '+ @where
    exec(@s)
    end
      

  4.   

    上面的你们众位测试过吗??
    明最有错误!
    获得临时表后还有后面的工作所以不能像  shuiniu(飞扬的梦)说的那样!谢谢众位了!
      

  5.   

    procedure proc S
      @Where varchar(100)
    as 
    begin
    Declare @TempTable table(Tid int)
    declare @s varchar(1000)
    set @s='insert into '+@TempTable(Tid) +'select top 10 i_id from tb_res '+@where
    exec(@s)
    select * from @TempTable
      

  6.   

    表变量和临时表不同,临时表可以像楼主那样,表变量就不行,它只能在定义它的过程中有效,而exec是另一个过程了,所以就用不了
      

  7.   

    --建议你改用临时表
    procedure proc S
      @Where varchar(100)
    as 
    begin
    create table #TempTable(Tid int)
    declare @s varchar(1000)
    set @s='insert into #TempTable(Tid) select top 10 i_id from tb_res '+@where
    exec(@s)
    select * from #TempTable
    end
      

  8.   

    --如果坚持用表变量,这样用:procedure proc S
      @Where varchar(100)
    as 
    begin
    declare @s varchar(1000)
    set @s='insert into #TempTable(Tid) select top 10 i_id from tb_res '+@where
    exec('create table #TempTable(Tid int)
    '+@s+'
    select * from #TempTable
    ')
    end