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

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

  • 相关阅读:
    HDU 3389 Game (阶梯博弈)
    HDU1536&&POJ2960 S-Nim(SG函数博弈)
    HDU 2089 不要62(数位DP)
    ACdream 1210 Chinese Girls' Amusement(高精度)
    CodeForces 659D Bicycle Race (判断点是否为危险点)
    HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)
    手动删除Win7系统服务列表中残留服务的操作步骤
    C++学习37 string字符串的访问和拼接
    C++学习36 string类和字符串
    C++学习35 模板中的函数式参数
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2212915.html
Copyright © 2011-2022 走看看