create proc [dbo].[SqlPager]
(@tblName varchar(255), -- 表名(注意:可以多表链接)@strGetFields varchar(1000) = '*', -- 需要返回的列@OrderfldName varchar(255)='', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@doCount int = 1 output, --查询到的记录数@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序@strWhere varchar(500) = '' -- 查询条件 (注意: 不要加 where))ASdeclare @strSQL nvarchar(4000) -- 主语句declare @strTmp varchar(110) -- 临时变量declare @strOrder varchar(300) -- 排序类型 if @strWhere != ''set @strSQL = 'select @doCount=count(*) from ' + @tblName + ' where '+@strWhereelseset @strSQL = 'select @doCount=count(*) from ' + @tblNameexec sp_executesql @strSQL,N'@doCount int out',@doCount out --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 set @strSQL=''; if @OrderType != 0beginset @strTmp = '<(select min'set @strOrder = ' order by [' + @OrderfldName +'] desc'--如果@OrderType不是0,就执行降序,这句很重要! endelsebeginset @strTmp = '>(select max'set @strOrder = ' order by [' + @OrderfldName +'] asc'endif @PageIndex = 1beginif @strWhere != ''set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrderelseset @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder--如果是第一页就执行以上代码,这样会加快执行速度endelsebegin--以下代码赋予了@strSQL以真正执行的SQL代码 set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where [' + @OrderfldName + ']' + @strTmp + '(['+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @OrderfldName + '] from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrderif @strWhere != ''set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where [' + @OrderfldName + ']' + @strTmp + '(['+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @OrderfldName + '] from ' + @tblName + ' where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderendexec (@strSQL)