zoukankan      html  css  js  c++  java
  • SQLServer分页查询存储过程

    项目中用到的SQLServer分页查询存储过程。


    【存储过程】

    create PROCEDURE prcPageResult

    -- 获得某一页的数据 --
    @currPage int = 1,                         --当前页页码 (即Top currPage)
    @showColumn varchar(2000) = '*',           --须要得到的字段 (即 column1,column2,......)
    @strCondition varchar(2000) = '',          --查询条件 (即 where condition......) 不用加wherekeyword
    @ascColumn varchar(100) = '',              --排序的字段名 (即 order by column asc/desc)
    @bitOrderType bit = 0,                     --排序的类型 (0为升序,1为降序)
    @pkColumn varchar(50) = '',                --主键名称
    @pageSize int = 20,                        --分页大小
    @RecordCount int output --返回总行数


    AS
    BEGIN -- 存储过程開始
    -- 该存储过程须要用到的几个变量 --
    DECLARE @strTemp varchar(1000)
    DECLARE @strSql varchar(4000)                   --该存储过程最后运行的语句
    DECLARE @strSql01 varchar(4000) 
    DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc)




    BEGIN
    IF @bitOrderType = 1   -- bitOrderType=1即运行降序
    BEGIN
        SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
        SET @strTemp = '<(SELECT min'
    END
    ELSE
    BEGIN
        SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
        SET @strTemp = '>(SELECT max'
    END


    IF @currPage = 1    -- 假设是第一页
    BEGIN
        IF @strCondition != ''
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+
                ' WHERE '+@strCondition+@strOrderType
        ELSE
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+@strOrderType
    END


    ELSE    -- 其它页
    BEGIN
        IF @strCondition !=''
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+
            ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
            ' '+@pkColumn+' FROM dbo.DemoData '+@strOrderType+') AS TabTemp)'+@strOrderType
        ELSE
            SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+
            ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
            ' FROM dbo.DemoData '+@strOrderType+') AS TabTemp)'+@strOrderType
    END

    END

    select @RecordCount=COUNT(*) from dbo.DemoData

    EXEC (@strSql)


    END  -- 存储过程结束
    ------------------------------------------------

    GO

    【调用方式】

    DECLARE @RecordCount int
    exec prcPageResult 1,'*','','id',1,'id',10,@RecordCount out
    SELECT @RecordCount

    ---

    DECLARE @RecordCount int
    exec prcPageResult 1,'*','name=''hugh''','id',0,'id',10,@RecordCount out --存储过程中转义字符为‘。所以name=’hugh'正确的写法应该是'name=''hugh'''而不是'name=/'hugh/''
    SELECT @RecordCount

  • 相关阅读:
    ODBC数据源选项卡中的系统DNS,用户DNS和文件DNS
    Oracle学习的零散问题
    【今日CV 计算机视觉论文速览】Thu, 7 Mar 2019
    【图像风格转换】项目参考资料总结
    【今日CV 计算机视觉论文速览】Thu, 28 Feb 2019
    【今日CV 计算机视觉论文速览】Tue, 26 Feb 2019
    【今日CV 计算机视觉论文速览】Wed, 27 Feb 2019
    【python】set集合基础与使用
    hdu 4259 Double Dealing
    hdu 1538 A Puzzle for Pirates 博弈论
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5206898.html
Copyright © 2011-2022 走看看