您的位置:1010cc时时彩经典版 > 1010cc安卓版 > 通用分页存储过程,MSSQLServer数据库的分页问题

通用分页存储过程,MSSQLServer数据库的分页问题

发布时间:2019-09-12 09:33编辑:1010cc安卓版浏览(183)

    if exists(select * from sys.objects where name='存储过程名称')
    drop proc 存储过程名称
    go
    CREATE proc 存储过程名称
    @tableName varchar(8000),          --表名、视图名
    @indexCol varchar(50) = 'a.id',      --标识列名(如:比如主键、标识,推荐使用索引列)
    @pageSize int = 10,                --页面大小
    @pageIndex int = 0,                --当前页
    @orderCol varchar(100) = 'a.id desc',--排序 (如:id)
    @where varchar(max) = '',         --条件
    @columns varchar(500) = '*'        --要显示的列
    as
    declare @sql varchar(max)
    declare @sql2 varchar(max)
    declare @where2 varchar(max)

    转:

    1010cc时时彩经典版 1

    技术交流群:171880541

        随着数据库中存储的数据的增多,满足用户查询条件的数据也随之增加。而用户一般不可能一次性看完所有的数据, 很多时候也不需要看完所有数据。在这种情况下,分页返回用户查询的数据就显得相当的重要。分页返回用户数据有如下好处:
    1、减少服务器磁盘系统地读取压力
    2、减少网络流量,减轻网络压力
    3、减轻客户端显示数据的压力
    4、提高处理效率。
          一般而言,分页处理分为两种:应用程序中的分页处理和数据库中的分页处理。目前大多数的应用都是在应用程序中借助支持数据分页处理的数据库访问组件(如DataGrid控件)实现分页处理。实际上,在数据库中实现分页处理,可以从源头减少数据处理量,效果往往可能跟明显。本文主要讨论数据库的分页问题。
          常规的取第n页数据方法为: Select top PageSize * from TableA where Primary_Key not in (select top (n-1)*PageSize Primary_Key from TableA )。
          对于应用程序而言,所做的就是在生成分页处理的T-SQL语句前先计算好各数字, 对于数据库而言,应该采用动态的T-SQL语句。
     以下是使用上述原理实现的通用分页处理存储过程:

    if @where <> ''
    begin
        select @where2 = ' And ' @where
        select @where = ' Where ' @where
    end
    else
        select @where2 = ''

    -- =============================================
    -- Author:        <jiangrod>
    -- Create date: <2010-03-03>
    -- Description:    <SQL2000通用分页存储过程>调用方法: sp_Pager2000 'xtest','*','ID','ORDER BY ID ASC','xname like ''"2name%''',3,20,0,0
    1010cc时时彩经典版,-- =============================================
    ALTER PROCEDURE [dbo].[sp_Pager2000]
    @tblName   varchar(255),            -- 表名如:'xtest'
    @strGetFields varchar(1000) = '*',  -- 需要返回的列如:'xname,xdemo'
    @pkName        nvarchar(50)='ID',        -- 主键名
    @strOrder varchar(255)='',          -- 排序的字段名如:'order by id desc'
    @strWhere  varchar(1500) = '',      -- 查询条件(注意:不要加where)如:'xname like ''"2name%''' 
    @pageIndex  int = 1,                -- 页码如:2
    @pageSize   int = 20,               -- 每页记录数如:20
    @recordCount int=0 out,             -- 记录总数
    @doCount bit=0                        -- 非0则统计,为0则不统计(统计会影响效率)
    AS

     


    create proc up_PageView
    (
        @tableName sysname,
        @colKey    nvarchar(100),
        @pageCurrent int = 1,
        @pageSize int = 10,
        @colShow nvarchar(4000) = '',
        @colOrder nvarchar(200) = '',
        @where nvarchar(2000) = '',
        @pageCount int output
    )
    as
    begin
        if object_id(@tableName) is null
        begin
        raiserror('the table is not existing!', 16,1)
        return
        end
        if  isnull(@colShow, '') = ''
            set @colShow  = '*'
        if isnull(@colOrder,'') = ''
            set @colOrder = ''
        else
            set @colOrder = 'order by ' @colOrder
        if isnull(@where, '') = ''
            set @where = ''
        else
            set @where = 'where ' @where
        declare @sql nvarchar(4000)
        if @pageCount is null
            begin
            set @sql = 'select @pageCount = count(*) from ' @tableName ' ' @where
            Exec sp_executesql @sql, '@pageCount int output', @pageCount output
            set @pageCount = (@pageCount @pageSize -1)/@pageSize
            end
        if @pageCurrent = 1
            set @sql = 'select top' ' ' convert(nvarchar(10), @pageSize)

    本文由1010cc时时彩经典版发布于1010cc安卓版,转载请注明出处:通用分页存储过程,MSSQLServer数据库的分页问题

    关键词: