CREATE procedure s_Tables_Page
(
@pagesize int,
@pageindex int,
@table varchar(200)
)
as
set nocount on
declare @indextable table(id int identity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
declare @sql varchar(4000),@sql1 varchar(1000)
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
select @sql='insert into '+@indextable+'(nid) select id from '+@table+' order by id desc'
exec (@sql)
select @sql1='select * from  '+@table+'  O,'+@indextable+'t where O.id=t.nid and t.id>'+@PageLowerBound+' and t.id<='+@PageUpperBound+' order by t.id'
exec (@sql1)

解决方案 »

  1.   

    CREATE procedure s_Tables_Page
    (
    @pagesize int,
    @pageindex int,
    @table varchar(200)
    )
    as
    set nocount on
    declare @indextable table(id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    exec ('declare @indextable table(id int identity(1,1),nid int) insert into '+@indextable+'(nid) select id from '+@table+' order by id desc select * from  '+@table+'  O,'+@indextable+'t where O.id=t.nid and t.id>'+@PageLowerBound+' and t.id<='+@PageUpperBound+' order by t.id')
    set nocount off
    GO
      

  2.   

    CREATE procedure s_Tables_Page
    (
    @pagesize int,
    @pageindex int,
    @table varchar(200)
    )
    as
    set nocount on
    --declare @indextable table(id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    exec ('declare @indextable table(id int identity(1,1),nid int) insert into '+@indextable+'(nid) select id from '+@table+' order by id desc select * from  '+@table+'  O,'+@indextable+'t where O.id=t.nid and t.id>'+@PageLowerBound+' and t.id<='+@PageUpperBound+' order by t.id')
    set nocount off
    GO
      

  3.   

    CREATE procedure s_Tables_Page
    (
    @pagesize int,
    @pageindex int,
    @table varchar(200)
    )
    as
    set nocount on
    create table #indextable (id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    exec ('insert #indextable (nid) select id from '+@table+' order by id desc')
    declare @a varchar(8000)
    set @a='select * from  '+@table+' O,#indextable t where O.id=t.nid and t.id>'+cast(@PageLowerBound as varchar(10))+' and t.id<='+cast(@PageUpperBound as varchar(10))+' order by t.id'
            exec(@a)
    set nocount off
    GO
      

  4.   

    这个问题我也遇到过,@indextable这种表变量不能用在动态sql中。
    可以定义一个表或临时表来替换一下就可以了。