zoukankan      html  css  js  c++  java
  • 万能分页存储过程

    USE [chy]
    GO
    /****** Object:  StoredProcedure [dbo].[list_page]    Script Date: 02/27/2014 14:30:04 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================

    declare @count int
    exec list_page ' z_username, z_sonusername, z_sonScore, z_getMoney, ServerNo, shoukuanusername, username, username3, firstUsername, levId, isPlay',
    'user4,user3,ztjl','user4.username3=ztjl.z_username and user4.username3=user3.username ','levId',1,@count output,10
    select @count

    ALTER PROCEDURE [dbo].[list_page]
        @SelectList            VARCHAR(2000)=' * ',    --欲选择字段列表
        @TableSource        VARCHAR(1000),    --表名或视图表
        @SearchCondition    VARCHAR(max)='',    --查询条件
        @OrderExpression    VARCHAR(1000)='id',    --排序表达式
        @PageIndex            INT = 1,        --页号,从0开始
     @Counts       int = 1 output,        ----查询到的记录数
        @PageSize            INT = 10      --页尺寸
        --@pagecount           int output             ---总控几页
    AS
    BEGIN
        IF @SelectList IS NULL OR LTRIM(RTRIM(@SelectList)) = ''
        BEGIN
            SET @SelectList = '*'
        END
        PRINT @SelectList
       
        SET @SearchCondition = ISNULL(@SearchCondition,'')
        SET @SearchCondition = LTRIM(RTRIM(@SearchCondition))
        IF @SearchCondition <> ''
        BEGIN
            IF UPPER(SUBSTRING(@SearchCondition,1,5)) <> 'WHERE'
            BEGIN
                SET @SearchCondition = 'WHERE ' + @SearchCondition
            END
        END
        PRINT @SearchCondition

        SET @OrderExpression = ISNULL(@OrderExpression,'')
        SET @OrderExpression = LTRIM(RTRIM(@OrderExpression))
        IF @OrderExpression <> ''
        BEGIN
            IF UPPER(SUBSTRING(@OrderExpression,1,5)) <> 'WHERE'
            BEGIN
                SET @OrderExpression = 'ORDER BY ' + @OrderExpression
            END
        END
        PRINT @OrderExpression

        IF @PageIndex IS NULL OR @PageIndex < 1
        BEGIN
            SET @PageIndex = 1
        END
        PRINT @PageIndex
        IF @PageSize IS NULL OR @PageSize < 1
        BEGIN
            SET @PageSize = 10
        END
        PRINT  @PageSize

        DECLARE @SqlQuery VARCHAR(4000)

        SET @SqlQuery='SELECT *,RowNumber
        FROM
            (SELECT ' + @SelectList + ',ROW_NUMBER() OVER( '+ @OrderExpression +') AS RowNumber
              FROM '+@TableSource+' '+ @SearchCondition +') AS RowNumberTableSource
        WHERE RowNumber BETWEEN ' + CAST(((@PageIndex - 1)* @PageSize+1) AS VARCHAR)
        + ' AND ' +
        CAST((@PageIndex * @PageSize) AS VARCHAR)
    --    ORDER BY ' + @OrderExpression
        PRINT @SqlQuery
        SET NOCOUNT ON
        EXECUTE(@SqlQuery)
        SET NOCOUNT OFF
     
     --    set @Counts= @@RowCount
     --此处@strTmp为取得查询结果数量的语句
     Declare @strTmp nvarchar(1000)       ----存放取得查询结果总数的查询语句和动态生成的SQL语句
      --此处@strTmp为取得查询结果数量的语句
     Set @strTmp = 'select @Counts=Count(*) FROM '+@TableSource +' ' + @SearchCondition

     ----取得查询结果总数量-----
    Exec Sp_executesql @strTmp,N'@Counts int out ',@Counts Out

     
    print @strTmp
    END

  • 相关阅读:
    php接收二进制文件转换成图片
    浅述WinForm多线程编程与Control.Invoke的应用
    精典策略模式
    js数组的操作详解
    PHP常用类
    收藏:五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    在 Windows 上部署 Qt 应用程序
    解决 MinGW5.14 编译 QT4.4.3 报错的问题
    懒人制作 deb 包
    NET 自定义配置文件 Configuration
  • 原文地址:https://www.cnblogs.com/cdaq/p/3571484.html
Copyright © 2011-2022 走看看