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

        思路来源:
        从publish 表中取出第 n 条到第 m 条的记录: 
        SELECT TOP m-n+1 * 
          FROM publish 
          WHERE (id NOT IN 
                  (SELECT TOP n-1 id 
                 FROM publish))

        存储过程:

    CREATE PROCEDURE pagination3
    @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 @strSQL varchar(5000) -- 主语句
    declare @strTmp varchar(110) -- 临时变量
    declare @strOrder varchar(400) -- 排序类型

    if @doCount != 0
       begin
          if @strWhere !=''
             set @strSQL = 'select count(*)  Total from  where '+@strWhere
          else
             set @strSQL = 'select count(*)  Total from '
       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
               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
    exec (@strSQL)
    --print @strSQL
    GO

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/Cuiy/p/3367542.html
Copyright © 2011-2022 走看看