declare @indextable table(id int identity(1,1),nid int)
 set rowcount @endIndex
 insert into @indextable(nid) select ID from Info  order by ID desc set @sqlStr=@sqlStr + 'select * from Info O, ' + @indextable +' t where O.ID=t.nid
 and t.id between ' + @startIndex + ' and ' + @endIndex print @sqlStr请问如上代码,明明已经申明了@indextable ,为什么还报错,要申明标量变量 "@indextable"。呢?
 请大家帮帮忙,谢谢了!

解决方案 »

  1.   

    @sqlStr是varchar形式的,@indextable是table形式的,你set @sql=...+@indextable
      

  2.   

    楼主这样做的用意是什么?应该是想取前多少条记录吗?为何不用row_number()呢
    用别的办法得到你的结果应该简单很多。
      

  3.   

    把声明部分带进去试试,like this
    DECLARE @sqlStr NVARCHAR(Max) SELECT @sqlStr=N'declare @indextable table(BrandCode VARCHAR(4)) 
     insert into @indextable(BrandCode) 
    select BrandCode from Brand  order by BrandCode desc
    select * from Brand O,  @indextable t where O.BrandCode=t.BrandCode'
     --and t.id between ' + @startIndex + ' and ' + @endIndex print @sqlStr
     EXEC(@sqlStr)