• sql 2005 分页存储过程


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go







    -- [SelectBase] 1,1,'Users','username=''test'''
    ALTER procedure [dbo].[SelectBase]
    @PageIndex                    int,
    @PageSize                    int,
    @TableName       nvarchar(max),
    @Where                     nvarchar(max)=''

    as
    Declare @rowcount          int
    Declare @intStart          int
    Declare @intEnd         int

    Declare @SQl nvarchar(max), @WhereR nvarchar(max), @OrderBy nvarchar(max)
    set @rowcount=0
    set nocount on

    if @Where<>''
    begin
      
    set @Where=' and '+@Where
    end

    if CHARINDEX('order by'@Where)>0
    begin
        
    set @WhereR=substring(@Where1CHARINDEX('order by',@Where)-1)    --取得条件
        set @OrderBy=substring(@WhereCHARINDEX('order by',@Where), Len(@Where))    --取得排序方式(order by 字段 方式)
    end
    else
    begin
        
    set @WhereR=@Where
        
    declare @PKName nvarchar(50)
        
    if(len(@TableName)>50)
        
    begin
            
    Set @PKName='ID'
        
    end
        
    else
        
    begin
            
    select top 1 @PKName=[name] from syscolumns where id=object_id(@TableNameorder by colstat desc
        
    end
        
    set @OrderBy=' order by '+@PKName+' asc'
    end

    set @SQl='SELECT @rowcount=count(*) from '+cast(@TableName as nvarchar(3000))+' where 1=1 '+@WhereR
    exec sp_executeSql @SQl,N'@rowcount int output',@rowcount output

    if @PageIndex=0 and @PageSize=0    --不进行分页,查询所有数据列表
    begin
        
    set @SQl='SELECT * from '+cast(@TableName as nvarchar(3000))+' where 1=1 '+@Where
    end
    else    --进行分页查询数据列表
    begin
        
    set @intStart=(@PageIndex-1)*@PageSize+1;
        
    set @intEnd=@intStart+@PageSize-1

        
    set @SQl='select * from(select *,ROW_NUMBER() OVER('+cast(@OrderBy as nvarchar)+') as row from '
        
    set @SQl=@SQL+@TableName+' where 1=1 '+@WhereR+') as a where row between '+cast(@intStart as varchar)+' and '+cast(@intEnd as varchar)
    end
    --print @SQl
    exec sp_executeSql @SQl
    --select @rowcount
    return @rowcount

    --------------------------------------------
    --
    print @SQl
    --
    exec [SelectBase] 1,8,'SpaceContent','UserInfoID=45'

    set nocount off







    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    flask简单应用以及配置文件的写法。
    Django REST framework使用及源码分析之节流
    rancher1.6高可用集群搭建
    Rancher安装多节点高可用(HA)
    Rancher 2.2.2
    TeamCity+Rancher+Docker实现.Net Core项目DevOps(目前成本最小的DevOps实践)
    Docker学习笔记_10 docker应用
    一键获取数据库整体信息脚本
    MySQL性能优化最佳实践
    MySQL性能优化最佳实践
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1545030.html
Copyright © 2020-2023  润新知