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)

  • 相关阅读:
    【Thinking in Java, 4e】初始化与清理
    【Thinking in Java, 4e】控制流程执行
    【Beginning Python】抽象(未完)
    【Python】装饰器 & 偏函数
    【c++ primer, 5e】函数声明 & 分离式编译
    【Python】闭包 & 匿名函数
    【c++ primer, 5e】【函数基础】
    【Python】高阶函数
    变相的取消Datagridview控件的选中状态
    NotifyICon控件使用
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2212918.html
Copyright © 2011-2022 走看看