-- =============================================
-- Author: xyy
-- Create date: 2011-04-06
-- Description: 分页,所有参数中除了@strwhere中可以而带方括号([]),其他均不可以带
-- =============================================
CREATE PROCEDURE [dbo].[sp_All_Pager]
@tblName nvarchar(255),--表名
@fldNames nvarchar(1000)='*',--字段列表(默认所有字段)
@fldOrderName nvarchar(255),--主键字段(排序用)
@orderType bit =0,--排序类型,非0则降序(默认升序)
@pageIndex int=1,--页码
@pageSize int =20,--页大小
@strWhere nvarchar(1500)='',--查询条件,不带where
@limitCount int =5000, --限制最多取5000条数据
@totalCount int output --总记录数
AS
BEGIN
SET NOCOUNT ON;
declare @strSQL nvarchar(4000)--主语句
declare @strTable nvarchar(500)--主查询临时表
declare @strOrderSQL nvarchar(1000)--总数查询语句
declare @strOutParam nvarchar(500)--输出参数
declare @strTmp nvarchar(255)--临时分页字句 max 和min
declare @strOrder nvarchar(255)--排序参数
--设置排序
if(@orderType != 0)
begin
set @strTmp = ' <(select min '
set @strOrder = ' order by [' + @fldOrderName +'] desc'
end
else
begin
set @strTmp = ' >(select max '
set @strOrder = ' order by [' + @fldOrderName +'] asc'
end
--设置主查询临时表
if(@strWhere!='')
set @strTable='(select top '+STR(@limitCount)+' '+@fldNames+' from ['+@tblName+'] where '+@strWhere+') as tmpTable'
else
set @strTable='(select top '+STR(@limitCount)+' '+@fldNames+' from ['+@tblName+']) as tmpTable'
--设置总数查询语句和主语句
set @strOrderSQL=N'select @totalCountOut=count(1) from '+@strTable
set @strOutParam=N'@totalCountOut int output'
if (@pageIndex = 1)
set @strSQL = 'select top ' + str(@pageSize) +' '+@fldNames+ ' from ' + @strTable + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@fldNames+ ' from ' + @strTable + ' where [' + @fldOrderName + ']' + @strTmp + '(['+ @fldOrderName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldOrderName + '] from ' + @strTable + @strOrder + ') as tblTmp) ' + @strOrder
exec sp_executesql @strOrderSQL,@strOutParam,@totalCountOut=@totalCount output
exec sp_executesql @strSQL
END
使用:
DECLARE @return_value int,
@totalCount int
EXEC @return_value = [dbo].[sp_All_Pager]
@tblName = N'scyuser',
@fldNames = N'*',
@fldOrderName = N'id',
@orderType = 0,
@pageIndex = 3,
@pageSize = 10,
@limitCount = 5000,
@totalCount = @totalCount OUTPUT
SELECT @totalCount as N'@totalCount'
SELECT 'Return Value' = @return_value
GO
来自:http://www.oschina.net/code/snippet_3555_4357
分享到:
相关推荐
### SQL存储过程分页技术详解 在数据库管理与应用程序开发中,数据的高效查询与展示是至关重要的。尤其是在处理大量数据时,分页查询能够显著提高数据加载速度和用户体验。SQL存储过程作为一种预编译的代码块,可以...
总结,ASP.NET SQL存储过程分页是一个重要的数据库查询优化技术,它结合了存储过程的高效性和分页的实用性。通过创建合适的存储过程,正确配置ASP.NET的控件,以及处理好分页事件,我们可以构建出高效且用户友好的...
### SQL存储过程分页代码详解 #### 一、概述 在数据库操作中,分页查询是一种常见的需求。尤其是在处理大量数据时,为了提高查询效率和用户体验,通常会采用分页的方式来展示数据。本文将详细解析一个SQL Server中...
这是我整理的,两种不同方式的分页方法,之前我做过测试的,如果数据量很大的话,然后对数据速度要求比较快的话,还是用sql存储过程分页比较好
c#,sql存储过程分页技术实现 主要运用sql存储过程进行分页实现,在进行分页实现,需要注意一下事项, * 在项目的根目录下面有一个db文件夹,请认真阅读,里面包含测试数据信息,当然你也可以 * 直接还原数据库即可
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
### C#调用SQL存储过程实现分页功能详解 在.NET框架中,使用C#语言进行数据库操作是非常常见的。本文将详细介绍如何通过C#来调用SQL Server中的存储过程,并实现分页功能。这对于提高ASP.NET应用程序的性能、增强...
本话题将深入探讨如何利用SQL存储过程实现高效的分页功能,并针对亿万级的数据量进行优化。 在处理大数据量时,传统的SQL分页方法,如使用`LIMIT`或`OFFSET`,可能会遇到性能问题,因为它们需要扫描大量的行来找到...
本教程重点讲解了如何利用.NET、Java和SQL进行存储过程分页,这是一种在数据库级别实现分页的方法,可以显著提高查询效率。 首先,让我们了解一下什么是存储过程。存储过程是预编译的SQL语句集合,存储在数据库...
本文将详细解析"经典的分页、排序SQL 通用存储过程"所涉及的知识点,并给出如何实现这样的存储过程。 首先,分页是数据库查询中的一种优化策略,用于限制每次查询返回的结果数量,从而避免一次性加载大量数据导致的...
### 最简单的SQL Server数据库存储过程分页 #### 知识点概述 在处理大量数据时,分页查询是一项常见的需求。传统的T-SQL分页方法可能会导致性能问题,尤其是在面对百万级别的数据集时。本文介绍一种简单且高效的...
### 速度最快SQL分页存储过程详解 #### 概述 在数据库操作中,分页查询是一种非常常见的需求。为了提高查询效率并优化用户体验,设计一个高效、灵活且易于使用的分页存储过程变得尤为重要。本文将详细介绍一个被...
当我们谈论“SQL高效存储过程分页”时,我们主要关注如何利用存储过程来实现数据库查询的分页效果,这在大数据量的场景下尤为重要,因为直接查询所有数据可能会导致性能下降,甚至阻塞数据库服务。 分页是Web应用...
### SQL Server 存储过程实现分页查询 #### 背景介绍 在数据库操作中,分页查询是非常常见的需求之一。特别是在数据量较大的场景下,分页不仅可以提高查询效率,还能改善用户体验。SQL Server 提供了多种方式进行...
很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术
本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数:当前页码(PageNumber)和每页记录数(PageSize)。...
分页存储过程 分页存储过程 分页存储过程 sql代码