ALTER PROCEDURE [dbo].[proc_Page]  
@Table VARCHAR(100), --表名  
@Columns VARCHAR(1000),--字段
@Condition VARCHAR(500), --查询条件
@sort VARCHAR(100), --排序字段 目前只支持单个字段  
@order  varchar(10),--升序或降序
@PageNumber INT, --开始页数  
@PageSize INT, --每页大小  
@Count int output--返回总条数
AS  
BEGIN
  DECLARE @SQL VARCHAR(MAX), @SQLCOUNT NVARCHAR(MAX) 
  SET @SQL = 'SELECT @A= Count(*) FROM ' + @Table + ' WHERE ' + @Condition  
  SET @SQLCOUNT=@SQL
  EXEC SP_EXECUTESQL @SQLCOUNT, N'@A INT OUTPUT',@Count OUTPUT
  IF LEN(@Columns)=0
  BEGIN
	SET @Columns='*'
  END
  IF @PageNumber = 1  
	  begin
		  SET @SQL = 'SELECT TOP ' + STR(@PageSize)+@Columns+'  FROM '+ @Table + ' WHERE ' + @Condition +' order by '+  @sort+' '+@order
	  END		  
  ELSE  
	  BEGIN
		  SET @SQL='select * from ( '+
			' select '+@Columns+', row_number() over(order by '+@sort+' '+@order+') rownumber from  '+@Table+
			' where   '+@Condition+
			') as a '+
			' where 1=1 and '+
			' rownumber between '+STR(@PageSize*(@PageNumber-1)+1)+' and '+STR(@PageSize*@PageNumber)
	  END  
  EXEC(@SQL)  
END

  

posted on 2013-03-12 14:01  new_fengzi  阅读(133)  评论(0)    收藏  举报