set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER Procedure [dbo].[PrePagers]
@tblName nvarchar(255), --表名
@getColumn nvarchar(2000)=' * ', --显示的列名
@currPage int, --当前页数
@pageSize int, --显示页数大小
@strWhere nvarchar(2000)=' ', --查询条件 (参数不要加Where)
@sortColumn nvarchar(200)=' ' , --排序字段
@sortType bit=0 , --排序类型 默认为降序(1 升序,0降序)
@doCount bit=0, --返回,非0返回记录总数
@pkColumn nvarchar(50)=' ', --主键名称
@Count int output --总记录数
AS
DECLARE @strSql nvarchar(4000) --主语句
Declare @strTmp nvarchar(1000) ----存放取得查询结果总数的查询语句
DECLARE @strOrder nvarchar(400) --排序类型
BEGIN
IF(@sortColumn!='') --当排序列名不为空时,说明有排序功能,
BEGIN
IF(@sortType =1) --当排序类型是1 表示升序
select @strOrder=' ORDER BY '+ @sortColumn +' ASC '
ELSE
SET @strOrder=' ORDER BY '+ @sortColumn +' DESC '
IF(@strWhere!='') --当查询条件不为空时,执行if中语句
SET @strSql ='SELECT TOP '+ str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE '
+ @strWhere + @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)+''
+ @pkColumn +' FROM ' + @tblName +' WHERE ' +@strWhere +') ' + @strOrder
else
SET @strSql='SELECT TOP ' + str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE '
+ @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)
+@pkColumn +' FROM ' + @tblName+ ')'+@strOrder
END
ELSE
BEGIN
IF(@strWhere!='')
SET @strSql='SELECT TOP '+ STR(@pageSize)+ @getColumn + ' FROM '+ @tblName + ' WHERE '
+@strWhere + @pkColumn +' NOT IN (SELECT TOP '+ STR((@currPage-1)*@pageSize)
+@pkColumn + ' FROM '+ @tblName +' WHERE '+ @strWhere +')'
ELSE
SET @strSql='SELECT TOP ' + str(@pageSize) + @getColumn +' FROM '+ @tblName +' WHERE '
+ @pkColumn + ' NOT IN (SELECT TOP '+ str((@currPage-1)*@pageSize)+''
+ @pkColumn +' FROM ' + @tblName +')'
END
IF(@doCount!=0) --当需要返回总记录数据时执行
BEGIN
IF(@strWhere!=' ') --返回行总记录数
set @strTmp=N'select COUNT(*) FROM '+ @tblName +' WHERE '+ @strWhere
ELSE
set @strTmp=N'select Count(*) FROM '+@tblName
END
exec sp_executesql @strTmp,N'@Count int output',@Count output
EXEC(@strSql)
print @strSql
return
END