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 ‘[email protected]+‘ ‘[email protected]

EXECUTE sp_executesql @countSql,N‘@TotalRecord int out‘,@TotalRecord OUT

END

ELSE

BEGIN

SET @[email protected]

END

SET @[email protected]

SET @TotalPage=(@TotalRecord-1)/@PageSize+1

SET @CurrentPageSize=(@PageIndex-1)*@PageSize

-- 返回总页数和总记录数

SET @[email protected]

SET @[email protected]

-- 返回记录

SET @[email protected]*@PageSize

EXEC    (‘SELECT *

FROM (SELECT TOP ‘[email protected]+‘ ‘[email protected]+‘, ROW_NUMBER() OVER (‘[email protected]+‘) AS PageView_RowNo

FROM ‘[email protected]+ ‘ ‘ + @Where +‘ ) AS TempPageViewTable

WHERE TempPageViewTable.PageView_RowNo >

‘[email protected])

END

RETURN 0

GO

时间: 2024-12-29 07:14:01

sql server分页存储过程的相关文章

sql server 分页存储过程

随着信息时代的发展信息系统的使用越来越多,信息量越来越大:当信息量越来越大,这在数据 展示,特别是报表这块对系统展现效率要求越来越高,对于千万级数据量的展示必须得使用分页来展示. www.2cto.com If object_id('SP_Pagination')is not null drop proc SP_Pagination go Create PROCEDURE SP_Pagination /**//* *****************************************

SQL SERVER 系统存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进

SQL Server 的存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进

SQL server分页的四种方法(算很全面了)

目录: 文章目录 方法一:三重循环 思路 代码实现 查询出的结果及时间 方法二:利用max(主键) 代码实现 查询出的结果及时间 方法三:利用row_number关键字 SQL实现 查询出的结果及时间 第四种方法:offset /fetch next(2012版本及以上才有) 代码实现 结果及运行时间 封装的存储过程 总结 ??这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及

SQL Server中存储过程 比 直接运行SQL语句慢的原因

问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2. 经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete时),可将此复杂操作用

SQL Server创建存储过程(转载)

什么是存储过程? q       存储过程(procedure)类似于C语言中的函数 q       用来执行管理任务或应用复杂的业务规则 q       存储过程可以带参数,也可以返回结果 q       存储过程可以包含数据操纵语句.变量.逻辑 控制语句等 存储过程的优点 (1)执行速度快. 存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译. 存储在数据库服务器,性能高. (2)允许模块化设计. 只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储

SQL Server中存储过程比直接运行SQL语句慢的原因

原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.       经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query

解决hibernate对Sql Server分页慢的问题

一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: Java代码   public Query setMaxResults(int maxResults); public Query setFirstResult(int firstResult); 只要调用了这两个方法并设置好参数,hibernate自动分页完全屏蔽了底层数据库分页技术,这也是众多开

SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR,所以一直没有尝试.最近因为项目的原因,在这方面做了一个调研,现在在这里分享一下心得. 首先要说明的是要在SQL Server中启用CLR必须是在SQL Server2005及以上版本,其次在默认情况下是