您的位置:金沙游乐场85155 > 大数据库 > 通用分页存储过程金沙游乐场85155

通用分页存储过程金沙游乐场85155

发布时间:2019-10-02 09:53编辑:大数据库浏览(129)

    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)

    转:http://www.cnblogs.com/jiangrod/archive/2010/03/17/1687841.html

    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 ''%222name%''',3,20,0,0
    -- =============================================
    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 ''%222name%''' 
    @pageIndex  int = 1,                -- 页码如:2
    @pageSize   int = 20,               -- 每页记录数如:20
    @recordCount int=0 out,             -- 记录总数
    @doCount bit=0                        -- 非0则统计,为0则不统计(统计会影响效率)
    AS

    select @sql = 'Select Top ' + Convert(varchar(10),@pageSize) + ' ' + @columns + ' From ' + @tableName
    select @sql2 = @sql + @where
    select @sql =  @sql + ' Where ' + '(' + @indexCol + ' Not In (Select Top ' + Convert(varchar(10),  ((@pageIndex-1)*@pageSize)) + ' ' + @indexCol

    Declare @sql         nvarchar(4000)
    Declare    @sqltemp    nvarchar(1000)
    set @sql=' From '+@tblName
    if(@strWhere!='') set @sql=@sql+' Where '+@strWhere

    • ' From ' + @tableName + @where +  ' Order by '+ @orderCol +'))'
      select @sql = @sql + @where2
      select @sql = @sql + ' Order by ' + @orderCol
      --获取数据集
      exec (@sql)
      PRINT @sql
      select @sql2 = Replace(@sql2,'Top ' + Convert(varchar(10), @pageSize) + ' ' + @columns, 'count(1)')
      --获取总数据条数
      exec(@sql2)

    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

    GO

    if @strWhere !=''
    begin
        set @strWhere=' where '+@strWhere
    end

    本文由金沙游乐场85155发布于大数据库,转载请注明出处:通用分页存储过程金沙游乐场85155

    关键词:

上一篇:没有了

下一篇:MsSQL使用加密连接SSL/TLS