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

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go


    -- =============================================
    -- Author:       
    -- Create date: 2008-12-16
    -- Description:    支持DISTINCT的通用分页存储过程(SQL2005)
    -- =============================================
    ALTER PROCEDURE [dbo].[GetPaged]
    (
        -- 列名称
        @Fields            NVARCHAR(1000) = '*',
        -- 表名称
        -- 不允许为空
        @Table            NVARCHAR(1000),
        -- 查询条件
        @Where            NVARCHAR(1000) = '',
        -- 排序的字段
        -- 不允许为空,无排序字段时可指定主键
        @Order            NVARCHAR(100),
        -- 页码
        @PageIndex        INT = 1,
        -- 每页数据
        @PageSize        INT = 10,
        -- 是否使用DISTINCT
        @UseDistinct    BIT = 0,
        -- 处理动作
        -- 0表示返回查询结果和总数,1表示只返回查询结果,2表示只返回总数
        @Action            TINYINT = 0
    )
    AS
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

    -- **************************
    -- 未做输入参数检查
    -- **************************

    DECLARE @sql NVARCHAR(MAX)
    DECLARE @Distinct NVARCHAR(50)

    IF @Fields = ''
        SET @Fields = '*'
    SET @Order = ' ORDER BY ' + @Order
    IF @Where <> ''
        SET @Where = ' WHERE ' + @Where
    IF @UseDistinct = 1
        SET @Distinct = ' DISTINCT '
    ELSE
        SET @Distinct = ''

    IF @Action <> 2
    BEGIN
        -- Get Paging Data
        IF @PageIndex = 1
            SET @sql = 'SELECT ' + @Distinct + ' TOP ' + STR(@PageSize) + ' ' + @Fields + ',0 AS RowNumber FROM ' + @Table + ' ' + @Where + ' ' + @Order
        ELSE
        BEGIN
            DECLARE @BeginRowNumber    INT
            SET @BeginRowNumber = (@PageIndex - 1) * @PageSize + 1
            DECLARE @EndRowNumber    INT
            SET @EndRowNumber = @PageIndex * @PageSize
      DECLARE @tempField  NVARCHAR(1000)
      if(@UseDistinct = 1)
       set @tempField='*'
      ElSE
       set @tempField=@Fields
            SET @sql = 'SELECT * FROM (SELECT ' + @tempField + ',ROW_NUMBER() OVER(' + @Order + ') AS RowNumber FROM '

            IF @UseDistinct = 1
                SET @sql = @sql + '(SELECT DISTINCT ' + @Fields + ' FROM ' + @Table + ' ' + @Where + ') AS S'
            ELSE
                SET @sql = @sql + @Table + ' ' + @Where

            SET @sql = @sql + ') AS T WHERE RowNumber BETWEEN ' + STR(@BeginRowNumber)+' AND ' + STR(@EndRowNumber) + ' ORDER BY RowNumber'
        END
        print @sql
        EXEC SP_EXECUTESQL @sql
    END

    IF @Action <>1
    BEGIN
        -- Get TotalCount
        SET @sql = 'SELECT TotalCount=COUNT(1) FROM (SELECT ' + @Distinct + ' ' +@Fields+ ' FROM '+ @Table + ' ' + @Where +') AS temptable'
        --print @sql
        EXEC sp_executesql @sql
    END

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


     

  • 相关阅读:
    安卓远程工具介绍及下载地址
    kylinos-kysec介绍
    远程控制工具ToDesk介绍
    kylinos桌面和服务器系统重置密码
    APT仓库目录和repository目录结构
    使用LVM实现动态磁盘管理
    如何实现访问http自动跳转https
    TypeScript学习 ———— 四、泛型
    TypeScript学习 ———— 三、function
    TypeScript学习 ———— 二、接口
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2114602.html
Copyright © 2011-2022 走看看