zoukankan      html  css  js  c++  java
  • 成熟sql 分页存储过程(UP_General_GetPage)

    View Code
      2 GO
    3 /****** Object: StoredProcedure [dbo].[UP_General_GetPage] Script Date: 03/17/2011 11:16:59 ******/
    4 SET ANSI_NULLS OFF
    5 GO
    6 SET QUOTED_IDENTIFIER OFF
    7 GO
    8
    9
    10 -- =============================================
    11 -- 主 题:通用分页存储过程
    12 -- 功 能:对数据按照 不同的列,不同页尺寸分页
    13 -- 编 写:王政
    14 -- 最后修改:2008-12-5
    15 -- 参数:
    16 -- @tblName nvarchar(255), -- 表名
    17 -- @strGetFields nvarchar(1000) = '*', -- 需要返回的列
    18 -- @fldName nvarchar(255)='', -- 排序的字段名
    19 -- @PageSize int = 10, -- 页尺寸(每页记录数)
    20 -- @PageIndex int = 1, -- 页码
    21 -- @OrderType bit = 0, -- 设置排序类型, 非0值则降序
    22 -- @strWhere nvarchar(1500) = '', -- 前缀 and 的 查询条件 (注意: 不要加 where)
    23 -- @RowCount int output -- 返回记录总数
    24 -- =============================================
    25 ALTER PROCEDURE [dbo].[UP_General_GetPage]
    26 @tblName nvarchar(255), -- 表名
    27 @strGetFields nvarchar(1000) = '*', -- 需要返回的列
    28 @fldName nvarchar(255)='ID', -- 排序的字段名
    29 @PageSize int = 10, -- 页尺寸(每页记录数)
    30 @PageIndex int = 1, -- 页码
    31 @OrderType bit = 0, -- 设置排序类型, 非0值则降序
    32 @strWhere nvarchar(1500) = '', -- 前缀 and 的 查询条件 (注意: 不要加 where)
    33 @RowCount int output -- 返回记录总数
    34 AS
    35 SET ANSI_WARNINGS ON
    36 declare @strSQL nvarchar(4000) -- 主语句
    37 declare @strTmp nvarchar(110) -- 临时变量
    38 declare @strOrder nvarchar(400) -- 排序类型
    39 set @strSQL = 'select @RowCount=ISNULL(count(*),0) from ' + @tblName + ' where 1=1 '+@strWhere
    40 exec sp_executesql @strSQL,N'@RowCount int output',@RowCount out
    41
    42 IF @RowCount=0
    43 BEGIN
    44 RETURN
    45 END
    46 --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
    47 set @strSQL =''
    48 if @OrderType!= 0 -- 降序(desc)
    49 begin
    50 set @strTmp = '<(select min'
    51 set @strOrder = ' order by ' + @fldName +' desc'
    52 --如果@OrderType不是0,就执行降序,这句很重要!
    53 end
    54 else -- 升序(asc)
    55 begin
    56 set @strTmp = '>(select max'
    57 set @strOrder = ' order by ' + @fldName +' asc'
    58 end
    59 if @PageIndex = 1 --// 页码
    60 begin
    61 set @strSQL = 'select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' + @tblName + ' where 1=1 ' + @strWhere + ' ' + @strOrder
    62 --如果是第一页就执行以上代码,这样会加快执行速度
    63 end
    64 else
    65 begin --以下代码赋予了@strSQL以真正执行的SQL代码
    66 set @strSQL ='select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@fldName+ ' ' +@strTmp+ '( ' +@fldName+ ' ) from (select top ' +str((@PageIndex-1)*@PageSize) + ' ' +@fldName+ ' from ' +@tblName+ ' where 1=1 ' +@strWhere+ ' ' +@strOrder+ ') as tblTmp) ' +@strWhere+ ' ' +@strOrder
    67 end
    68 --print @strSQL
    69 exec (@strSQL)

  • 相关阅读:
    HLG 1522 子序列的和【队列的应用】
    POJ 3273 Monthly Expense【二分】
    HDU 4004 The Frog's Games 【二分】
    POJ 2001 Shortest Prefixes【第一棵字典树】
    POJ 2823 Sliding Window【单调对列经典题目】
    HDU 1969 Pie 【二分】
    POJ 3125 Printer Queue【暴力模拟】
    POJ 3250 Bad Hair Day【单调栈】
    字典树【模板】
    验证码 Code
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2212918.html
Copyright © 2011-2022 走看看