存储过程|分页 -- 获取指定页的数据 declare strSQL varchar(5000) -- 主语句 else else else
CREATE PROCEDURE pagination
tblName varchar(255), -- 表名
strGetFields varchar(1000) = '*', -- 需要返回的列
fldName varchar(255)='', -- 排序的字段名
PageSize int = 10, -- 页尺寸
PageIndex int = 1, -- 页码
doCount bit = 0, -- 返回记录总数, 非 0 值则返回
OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare strTmp varchar(110) -- 临时变量
declare strOrder varchar(400) -- 排序类型
if doCount != 0
begin
if strWhere !=''
set strSQL = "select count(*) as Total from [" + tblName + "] where "
else
set strSQL = "select count(*) as Total from [" + tblName + "]"
end
--以上代码的意思是如果doCount传递过来的不是0,就执行总数统计。以下的所有代码都是doCount为0的情况
begin
if OrderType != 0
begin
set strTmp = "<(select min"
set strOrder = " order by [" + fldName +"] desc"
--如果OrderType不是0,就执行降序,这句很重要!
end
begin
set strTmp = ">(select max"
set strOrder = " order by [" + fldName +"] asc"
end
if PageIndex = 1
begin
if strWhere != ''
set strSQL = "select top " + str(PageSize) +" "+ " from [" + tblName + "] where " + strWhere + " " + strOrder
else
set strSQL = "select top " + str(PageSize) +" "+ " from ["+ tblName + "] "+ strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
begin
--以下代码赋予了strSQL以真正执行的SQL代码
set strSQL = "select top " + str(PageSize) +" "+ " from ["
+ tblName + "] where [" + fldName + "]" + strTmp + "(["+ fldName + "]) from (select top " + str((PageIndex-1)*PageSize) + " ["+ fldName + "] from [" + tblName + "]" + strOrder + ") as tblTmp)"+ strOrder
if strWhere != ''
set strSQL = "select top " + str(PageSize) +" "+ " from ["
+ tblName + "] where [" + fldName + "]" + strTmp + "(["
+ fldName + "]) from (select top " + str((PageIndex-1)*PageSize) + " ["
+ fldName + "] from [" + tblName + "] where " + strWhere + " "
+ strOrder + ") as tblTmp) and " + strWhere + " " + strOrder
end
end
exec (strSQL)
GO
通用高效分页存储过程代码
80酷酷网 80kuku.com