• mssql分页存储过程


    本文转自百度文库http://wenku.baidu.com/view/8f6ec149fe4733687e21aa72.html

    必须有主键

    原代码

    Code

     简单改造,调整了参数的顺序,重新进行了命名,以符合的我的使用习惯

     1 if exists(select name from sysobjects where name='pages' and xtype='p')
     2 drop proc pages
     3 go
     4 
     5 CREATE PROC pages
     6 @bit_DoCount BIT   ,         -- 返回记录总数, 0不返回,1返回
     7 @str_tblName varchar(255),      -- 表名
     8 @str_SelectFields varchar(1000),  -- 需要返回的列(所有字段*)
     9 @str_Where varchar(1500),          -- 查询条件 (注意: 不要加 where)
    10 @str_PkField varchar(255),        --主键名称(决定着取出来的记录)
    11 @bit_OrderType bit,               -- 设置排序类型, 0升序,1降序
    12 @int_PageSize int,                  -- 多少条/页
    13 @int_PageIndex int                 -- 页码
    14 AS
    15 
    16 declare @strSQL varchar(5000)     --主语句
    17 declare @strTmp varchar(150)      --临时变量
    18 declare @strOrder varchar(400)    --排序类型
    19 
    20 --如果@doCount传递过来的不是0,就执行总数统计。
    21 if @bit_DoCount != 0
    22     begin
    23         --查询条件为空
    24         set @strSQL = 'select count(*) as Total from ' + @str_tblName
    25         --查询条件不为空
    26         if @str_Where !=''
    27             set @strSQL = 'select count(*) as Total from ' + @str_tblName + ' where '+@str_Where
    28     end 
    29 
    30 --以下的所有代码都是@doCount为0的情况:
    31 --如果@OrderType是1,就执行降序,否则为升序!
    32 else
    33     begin
    34         --查询条件为空
    35         set @strTmp = '>(select max'
    36         set @strOrder = ' order by ' + @str_PkField +' asc'
    37         --查询条件不为空
    38         if @bit_OrderType = 1
    39             begin
    40                 set @strTmp = '<(select min'
    41                 set @strOrder = ' order by ' + @str_PkField +' desc'
    42             end
    43 
    44         --如果是第一页就执行代码,这样会加快执行速度
    45         if @int_PageIndex = 1
    46             begin
    47                 --查询条件为空
    48                 set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' '+@strOrder
    49                 --如果查询条件不为空,
    50                 if @str_Where != '' 
    51                     set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' where '+@str_Where+' '+@strOrder
    52             end
    53         --如果不是第一页,则
    54         else
    55             begin
    56             --以下代码赋予了@strSQL以真正执行的SQL代码
    57 
    58                 --sql查询语句
    59                 set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
    60                         + @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
    61                         + @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
    62                         + @str_PkField + ' from ' + @str_tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
    63 
    64 
    65                 --如果查询条件不为空,则另写sql语句
    66                 if @str_Where != ''
    67                     set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
    68                             + @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
    69                             + @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
    70                             + @str_PkField + ' from ' + @str_tblName + ' where ' + @str_Where + ' '
    71                             + @strOrder + ') as tblTmp) and ' + @str_Where + ' ' + @strOrder
    72             end 
    73     end 
    74     PRINT @strSQL 
    75 exec (@strSQL)
    76 GO
    View Code
  • 相关阅读:
    配置Keepalived双主热备
    配置 Keepalived
    Keepalived安装部署
    Keepalived配置Nginx自动重启
    Collectiont和Collections的区别
    HashMap和Hashtable的联系和区别
    Vector和ArrayList的联系和区别
    ArrayList和LinkedList 的联系和区别
    集合和数组的比较
    struts下载
  • 原文地址:https://www.cnblogs.com/ByBull/p/3355339.html
Copyright © 2020-2023  润新知