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

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

    前几天写,分页存储过程!
    ------------------------------------------------------------------------------------------------------------------------
    -- Function: Select a record from table SearchKey
    -- Date Created: 2007年7月14日
    -- Created By:    sjf
    ------------------------------------------------------------------------------------------------------------------------
    -- 获取指定页的数据
    CREATE PROCEDURE spPagination
    @tblName varchar(255), -- 表名
    @strGetFields varchar(1000) = '*', -- 需要返回的列
    @fldName varchar(255)='', -- 排序的字段名
    @PageSize int = 10, -- 页尺寸
    @PageIndex int = 1, -- 页码
    @doCount bit = 0, -- 返回记录总数, 非 0 值则返回
    @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
    @tblPk varchar(100),--表的主键字段(可省略)
    @MainTable varchar(100),--主要操作表格(可省略)
    @strWhere varchar(1500) = ''-- 查询条件 (注意: 不要加 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 "
           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,"+ @tblPk
              --如果@OrderType不是0,就执行降序,这句很重要!
            end
          else
            begin
              set @strTmp = ">(select max"
              set @strOrder = " order by " + @fldName +" asc,"+ @tblPk
            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
           else
       begin
              --以下代码赋予了@strSQL以真正执行的SQL代码
               if @strWhere != ''
        begin
          set @strSQL="select top "+str(@PageSize*@PageIndex)+" newid = cast("+" AS int),tempid = IDENTITY (int, 1, 1) INTO #temptable1 FROM "+ @tblName + " where "+ @strWhere+ " " + @strOrder +";"
          +"select top "+str(@PageSize)+" "+" from "+" where " +"   in(SELECT newid FROM [#temptable1] WHERE (tempid >"+str(@PageSize*(@PageIndex-1))+")) "
        end
               else
         set @strSQL="select top "+str(@PageSize*@PageIndex)+" newid = cast("+" AS int),tempid = IDENTITY (int, 1, 1) INTO #temptable1 FROM "+ @tblName+ " " + @strOrder +";"
         +"select top "+str(@PageSize)+" "+" from "+" where " +"   in(SELECT newid FROM [#temptable1] WHERE (tempid >"+str(@PageSize*(@PageIndex-1))+")) "
        end
    end
    --print @strSQL
    exec (@strSQL)
    GO

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/netcorner/p/2912318.html
Copyright © 2011-2022 走看看