• 分页sql存储过程


    01set ANSI_NULLS ON
    02set QUOTED_IDENTIFIER ON
    03go
    04 
    05/*
    06功能描述: 通用分页显示查询
    07如果有自增标识字段,在@strGetFields中不要加入此字 段信息,
    08如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
    09输入参数:
    10@tblName: 表名
    11@strGetFields: 需要返回的列 '*':返回所以列信息
    12@PageSize: 页尺寸
    13@PageIndex: 页码
    14@doCount: 返回记录总数, 非 0 值则返回
    15@strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
    16格式: Field1 DESC, Field2 ASC
    17@strWhere: 查询条件,(注意: 不要加 WHERE)
    18输出参数: @RecordCount: 记录总数
    19作 者: Nestcn
    20创建时间: 2010-03-09
    21更改纪录:
    22*/
    23ALTER PROCEDURE [dbo].[MyPagination]
    24(
    25@tblName varchar(255),
    26@strGetFields varchar(1000) = '*',
    27@PageSize int = 10,
    28@PageIndex int = 1,
    29@doCount bit = 0,
    30@strOrderBy varchar(500) = '',
    31@strWhere varchar(1500) = '',
    32@RecordCount int output
    33)
    34AS
    35-- 主语句
    36DECLARE @strSQL varchar(5000) SET @strSQL = ''
    37-- 排序变量
    38DECLARE @strOrder varchar(400) SET @strOrder = ''
    39 
    40SET @RecordCount = 0
    41--如果@doCount传递过来的不是0,就执行总数统计
    42IF (@doCount != 0)
    43BEGIN
    44DECLARE @sWhere varchar(2000)
    45 
    46SET @sWhere = ''
    47IF (@strWhere != '')
    48SET @sWhere = ' WHERE ' + @strWhere
    49 
    50SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '
    51SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '
    52SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere
    53 
    54EXEC (@strSQL)
    55 
    56SELECT @RecordCount=Total FROM tmpTable
    57 
    58--删除总数统计临时表
    59EXEC ('DROP TABLE tmpTable')
    60END
    61 
    62PRINT @RecordCount
    63 
    64--排序字段信息
    65IF (@strOrderBy != '')
    66SET @strOrder = ' ORDER BY ' + @strOrderBy
    67--如果是第一页就执行以上代码,这样会加快执行速度
    68IF (@PageIndex = 1)
    69BEGIN
    70IF (@strWhere != '')
    71SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder
    72ELSE
    73SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder
    74END
    75ELSE
    76BEGIN
    77--为搜索表建立自动编号 保存到临时表中
    78SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
    79IF (@strWhere != '')
    80SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder
    81ELSE
    82SET @strSQL = @strSQL + @strOrder
    83 
    84--以下代码赋予了@strSQL以真正执行的SQL代码
    85SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
    86END
    87 
    88PRINT @strSQL
    89 
    90--执行分页查询
    91EXEC (@strSQL)
    作者:KKcat
        
    个人博客:http://jinzhao.me/
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    第二十二章 CLR寄宿和AppDomain
    第二十一章 托管堆和垃圾回收
    第二十章 异常和状态管理
    第十九章 可空值类型
    第十八章 定制特性
    第十七章 委托
    第十六章 数组
    第十五章 枚举类型和位标志
    html标签溢出问题
    Java 路径问题
  • 原文地址:https://www.cnblogs.com/jinzhao/p/1681772.html
Copyright © 2020-2023  润新知