zoukankan      html  css  js  c++  java
  • SQL 2005通用分页存储过程

    -- =============================================
    --
     Description:    <SQL2005及后续版本通用分页存储过程>调用方法: sp_Pager2005 'xtest','*','ORDER BY ID ASC','xname like ''%222name%''',2,20,0,0
    --
                        适合从单个表查询数据
    --
     =============================================
    ALTER PROCEDURE [dbo].[Proc_GetDataPaged_2005]
    @tblName   varchar(255),            -- 表名如:'xtest'
    @strGetFields varchar(1000= '*',  -- 需要返回的列如:'xname,xdemo'
    @strOrder varchar(255)='',          -- 排序的字段名如:'order by id desc'
    @strWhere  varchar(1500= '',      -- 查询条件(注意:不要加where)如:'xname like ''%222name%''' 
    @pageIndex int=1,                  --开始记录位置
    @pageSize   int = 20,               -- 每页记录数如:20
    @recordCount int output,            -- 记录总数
    @doCount bit=0                        -- 非0则统计,为0则不统计(统计会影响效率)
    AS

    declare @strSQL varchar(5000)
    declare @strCount nvarchar(1000)
    --总记录条数
    if(@doCount!=0)
    begin
        if(@strWhere !='')
        begin
            set @strCount='set @num=(select count(1) from '+ @tblName + ' where '+@strWhere+' )'
        end
        else
        begin
            set @strCount='set @num=(select count(1) from '+ @tblName + ' )'
        end
        EXECUTE sp_executesql @strCount ,N'@num INT output',@RecordCount output
    end

    if @strWhere !=''
    begin
        set @strWhere=' where '+@strWhere
    end
    set @strSQL='SELECT * FROM (SELECT ROW_NUMBER() OVER ('+@strOrder+') AS ROWID,'
    set @strSQL=@strSQL+@strGetFields+' FROM ['+@tblName+''+@strWhere
    set @strSQL=@strSQL+') AS sp WHERE ROWID BETWEEN '+str((@pageindex-1)*@pagesize+1)
    set @strSQL=@strSQL+' AND '+str(@pageindex*@pagesize)

    exec (@strSQL)
  • 相关阅读:
    P1629 邮递员送信
    P1119 灾后重建
    最短路问题
    P1194 买礼物
    最小生成树
    P1038 神经网络
    P2661 信息传递
    mysql 5.7启动报错
    docker flannel网络部署和路由走向分析
    k8s---无头服务
  • 原文地址:https://www.cnblogs.com/hejunrex/p/2224895.html
Copyright © 2011-2022 走看看