• 成熟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)

  • 相关阅读:
    BOOST库 消息队列 紧急注意事项 what(): boost::interprocess_exception::library_error
    BOOST 环形队列circular_buffer
    Linux ALSA音频库(二) 环境测试+音频合成+语音切换 项目代码分享
    系统编程-进程-先后fork或open一个文件的区别
    实战:单例的析构,为什么可以析构,重复析构等注意事项
    系统编程-进程间通信-无名管道
    4.1 urllib--通过URL打开任意资源--2
    4.1 urllib--通过URL打开任意资源
    第四章 4.1 urllib--通过URL打开任意资源
    3.5 爬虫身份识别与实现网络爬虫技术语言
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2212918.html
Copyright © 2020-2023  润新知