zoukankan      html  css  js  c++  java
  • 通用分页存储过程

    CREATE PROCEDURE pagelist

    @tblName varchar(255)="", -- 表名

    @strGetFields varchar(1000) = "*", -- 需要返回的列

    @fldName varchar(255)="id", -- 排序的字段名

    @PageSize int =10, -- 页尺寸

    @PageIndex int = 1, -- 页码

    @doCount bit = 0, -- 返回记录总数, 非 0 值则返回

    @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

    @strWhere varchar(1500) = "1=1"-- 查询条件 (注意: 不要加 where)

    AS

    declare @strSQL varchar(5000) -- 主语句

    declare @strTmp varchar(110) -- 临时变量

    declare @strOrder varchar(400) -- 排序类型

    if @doCount != 0

    begin

    if @strWhere !=""

    set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere

    else

    set @strSQL = "select count(*) as Total from [" + @tblName + "]"

    end

    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:

    else

    begin

    if @OrderType != 0

    begin

    set @strTmp = "<(select min"

    set @strOrder = " order by [" + @fldName +"] desc"

    --如果@OrderType不是0,就执行降序,这句很重要!

    end

    else

    begin

    set @strTmp = ">(select max"

    set @strOrder = " order by [" + @fldName +"] asc"

    end

    if @PageIndex = 1

    begin

    if @strWhere != ""

    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder

    else

    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "

            from ["+ @tblName + "] "+ @strOrder

    --如果是第一页就执行以上代码,这样会加快执行速度

    end

    else

    begin

    --以下代码赋予了@strSQL以真正执行的SQL代码 秦皇天下 qhtx.net 编辑

    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " 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) +" "+@strGetFields+ " 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

    --print @strSQL

    exec (@strSQL)

    Technorati : sql 分页

  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/oneroom/p/1652632.html
Copyright © 2011-2022 走看看