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

    /*********************************************************************************
    * Function: PagedProc                                                  *
    * Description: *
    * Sql2005分页存储过程                                              *
    * Finish DateTime: *
    * 2009/1/3                                                           *
    *    Example:                                                                  *
    *    WEB_PageView @Tablename = 'Table1', @Returnfields = '*', *
    *            @PageSize = 2, @PageIndex = 1, @Where = '',                    *
    *            @OrderBy=N'ORDER BY id desc'                                       *
    *********************************************************************************/

    IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[PagedProc]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)
    DROP PROCEDURE [dbo].[PagedProc]
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_NULLS ON
    GO


    CREATE PROCEDURE dbo.PagedProc
        @TableName      NVARCHAR(200),          -- 表名
        @ReturnFields   NVARCHAR(1000) = '*',   -- 需要返回的列
        @PageSize       INT = 10,               -- 每页记录数
        @PageIndex      INT = 1,                -- 当前页码
        @Where          NVARCHAR(1000) = '',    -- 查询条件
        @OrderBy        NVARCHAR(1000),         -- 排序字段名 最好为唯一主键    
        @PageCount      INT OUTPUT,             -- 页码总数
        @RecordCount    INT OUTPUT       -- 记录总数

    WITH ENCRYPTION AS

    --设置属性
    SET NOCOUNT ON

    -- 变量定义
    DECLARE @TotalRecord INT
    DECLARE @TotalPage INT
    DECLARE @CurrentPageSize INT
    DECLARE @TotalRecordForPageIndex INT

    BEGIN
        IF @Where IS NULL SET @Where=N''
        
        -- 记录总数
        DECLARE @countSql NVARCHAR(4000)
        
        IF @RecordCount IS NULL
        BEGIN
            SET @countSql='SELECT @TotalRecord=Count(*) From '+@TableName+' '+@Where
            EXECUTE sp_executesql @countSql,N'@TotalRecord int out',@TotalRecord OUT
        END
        ELSE
        BEGIN
            SET @TotalRecord=@RecordCount
        END     
        
        SET @RecordCount=@TotalRecord
        SET @TotalPage=(@TotalRecord-1)/@PageSize+1 
        SET @CurrentPageSize=(@PageIndex-1)*@PageSize

        -- 返回总页数和总记录数
        SET @PageCount=@TotalPage
        SET @RecordCount=@TotalRecord
            
        -- 返回记录
        SET @TotalRecordForPageIndex=@PageIndex*@PageSize
        
        EXEC    ('SELECT *
                FROM (SELECT TOP '+@TotalRecordForPageIndex+' '+@ReturnFields+', ROW_NUMBER() OVER ('+@OrderBy+') AS PageView_RowNo
                FROM '+@TableName+ ' ' + @Where +' ) AS TempPageViewTable
                WHERE TempPageViewTable.PageView_RowNo >
                '+@CurrentPageSize)
        
    END
    RETURN 0
    GO
                


  • 相关阅读:
    在 vue cli3 的项目中配置双服务,模拟 ajax 分页请求
    vue 外部字体图标使用,无须绝对路径引入办法
    json-sever 配置与应用
    使用 phpstudy 搭建本地测试环境
    自调用匿名函数(匿名闭包)解析与调用
    bootstrap-treeview 在 bootstrap 4 不兼容解决办法及使用
    SCSS 在项目中的运用
    题目1020:最小长方形(排除原点)
    题目1018:统计同成绩学生人数(数组或者map)
    大话比特币病毒
  • 原文地址:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/7354942.html
Copyright © 2011-2022 走看看