sql中单表的存储过程

ALTER procedure [dbo].[proc_Pager]
 @tablename varchar(30),
 @keycolumn varchar(30),
 @selectcolumn varchar(300),
 @ordercolumn varchar(30),
 @orderdirec varchar(5),
 @pagesize int,
 @pageindex int,
 @where varchar(300),
 @rowcount int output,
 @pagecount int output
as
begin
 declare @tempsql nvarchar(max)
 declare @sql varchar(max)
 if (@where is null or @where ='')
  set @tempsql=N' select @rowcount=count(*) from ' + @tablename
 else
  set @tempsql=N' select @rowcount=count(*) from ' + @tablename + ' where ' + @where
 execute sp_executesql @tempsql,N' @rowcount int output ',@rowcount output
 
 if @pageindex < 1
  set @pageindex=1
 
 if @rowcount%@pagesize=0
  set @pagecount=@rowcount/@pagesize
 else
  set @pagecount=@rowcount/@pagesize + 1
 
 if (@pagecount = 0)
  set @pagecount = 1

 if @pageindex > @pagecount
  set @pageindex=@pagecount
 
 if (@where is null or @where ='')
  begin
  set @sql='select top ' + cast(@pagesize as varchar(10)) + ' ' + @selectcolumn + ' from ' + @tablename +
   ' where ' + @keycolumn + ' not in (select top ' +
   cast(@pagesize * (@pageindex - 1) as varchar(10)) + ' ' + @keycolumn + ' from ' +
   @tablename + ' order by ' + @ordercolumn + ' ' + @orderdirec + ') order by ' + @ordercolumn + ' ' + @orderdirec
  end
 else
  begin
  
  set @sql='select top ' + cast(@pagesize as varchar(10)) + ' ' + @selectcolumn + ' from ' + @tablename +
   ' where ' + @where + ' and ' + @keycolumn + ' not in (select top ' +
   cast(@pagesize * (@pageindex - 1) as varchar(10)) + ' ' + @keycolumn + ' from ' +
   @tablename + ' where ' + @where + ' order by ' + @ordercolumn + ' ' + @orderdirec + ')' + ' order by ' + @ordercolumn + ' ' + @orderdirec
  end

 print @sql
 print @pagecount
 print @rowcount
 execute(@sql)
end

posted on 2012-08-31 10:42  风火网络科技  阅读(171)  评论(0)    收藏  举报

导航