简单表的 分页存储过程 (不支持多表连接)

CREATE PROCEDURE [dbo].[P_GridViewPager] (
    @recordTotal INT OUTPUT,            --输出记录总数
    @viewName VARCHAR(800),        --表名
    @fieldName VARCHAR(800) = ‘*‘,        --查询字段
    @keyName VARCHAR(200) = ‘Id‘,            --索引字段
    @pageSize INT = 20,                    --每页记录数
    @pageNo INT =1,                    --当前页
    @orderString VARCHAR(200),        --排序条件
    @whereString VARCHAR(800) = ‘1=1‘        --WHERE条件
)
AS
BEGIN
     DECLARE @beginRow INT
     DECLARE @endRow INT
     DECLARE @tempLimit VARCHAR(200)
     DECLARE @tempCount NVARCHAR(1000)
     DECLARE @tempMain VARCHAR(1000)
     --declare @timediff datetime 

     set nocount on
     --select @timediff=getdate() --记录时间

     SET @beginRow = (@pageNo - 1) * @pageSize    + 1
     SET @endRow = @pageNo * @pageSize
     SET @tempLimit = ‘rows BETWEEN ‘ + CAST(@beginRow AS VARCHAR) +‘ AND ‘+CAST(@endRow AS VARCHAR)

     --输出参数为总记录数
     SET @tempCount = ‘SELECT @recordTotal = COUNT(*) FROM (SELECT ‘+@keyName+‘ FROM ‘+@viewName+‘ WHERE ‘+@whereString+‘) AS my_temp‘
     EXECUTE sp_executesql @tempCount,N‘@recordTotal INT OUTPUT‘,@recordTotal OUTPUT

     --主查询返回结果集
     SET @tempMain = ‘SELECT * FROM (SELECT ROW_NUMBER() OVER (order by ‘+@orderString+‘) AS rows ,‘+@fieldName+‘ FROM ‘+@viewName+‘ WHERE ‘+@whereString+‘) AS main_temp WHERE ‘+@tempLimit

     --PRINT @tempMain
     EXECUTE (@tempMain)
     --select datediff(ms,@timediff,getdate()) as 耗时 

     set nocount off
END

GO
时间: 2024-11-11 08:24:10

简单表的 分页存储过程 (不支持多表连接)的相关文章

完整SQL分页存储过程(支持多表联接)

http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************************************* * 作 用:数据分页(完整SQL分页存储过程(支持多表联接))* 作 者:齐李平* 创建日期:2009-03-23* 使用说明: 1.单表调用方法:EXEC proc_DataPagination @tblName = 'ipa',@fldName

SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

原文:SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页) SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅途(www.Zuowenjun.cn) --CreateDate:2015-06-02 --Function:分页获取数据 /******************/ crea

数据库分页存储过程,支持多表联合查询

CREATE PROCEDURE [dbo].[getInQuiryAllByPage] @tableNames varchar(5000), --表名,可多表,逗号分隔 @tbFields varchar(5000)= '* ',--字段名,如果多表请带前缀 @conditionStr varchar(5000)= ' ', --where子句,可为空,不带where @sortedStr varchar(5000), --排序字段,可多个,要带desc或asc,不带order by,必须,不

多表查询分页存储过程,解决了第二页不显示的问题

SET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO ALTER PROCEDURE [dbo].[UP_Pagination]/****************************************************************** 千万数量级分页存储过程 *****************************************************************参数说明:1.Tables :表名称,视

两个表的分页存储过程

create proc [dbo].[usp_contacts_select_by_page]--存储过程名称 @pageindex int,--当前页 @pagesize int,--每页条数 @pagecount int output,--总页数 @recordcount int output--总条数 as begin select c1.*,c2.groupName into #tmp_contacts from Contacts as c1 inner join ContactGrou

千万级数据分页存储过程 asp.net页面调用分页全过程

下方有调用过程 从程序中考虑:比如用数据缓冲和连接池技术从数据库服务器端考虑:比如csdn只选出前300行纪录,因为用户不需要那么多纪录.你也不必把1000万条全部分页.你也不必把纪录放在一个表中,一年(太多就一个月)的数据放一张表或定期把历史数据导出到数据数据仓库中,不要用一张表装1000万条记录.做好索引.优化查询!尽量少用模糊查询,避免表扫描.不能让客户端连续多次搜索(csdn就是) 千万级的数据库,有分页的意义吗?对于用户来说就是信息的海洋了,去看看Google怎么做的吧,根本就不存在如

分页存储过程--From:桌面备份 -> sql2005新功能.docx

二.以下示例将返回行号为 50 到 60(含)的行,并以 OrderDate 排序. USE AdventureWorks; GO WITH OrderedOrders AS (SELECT SalesOrderID, OrderDate, ROW_NUMBER() OVER (order by OrderDate)as RowNumber FROM Sales.SalesOrderHeader ) SELECT * FROM OrderedOrders WHERE RowNumber betw

千万数量级分页存储过程

/****** Object: StoredProcedure [dbo].[Usp_PCustomer_V2_Pagination] Script Date: 10/16/2015 15:36:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* EXEC dbo.Usp_PCustomer_V2_Pagination @Tables = 'V_PCustomer_V2_GetAuditorList', -- varcha

千万数量级分页存储过程(效果演示)

CREATE PROCEDURE CN5135_SP_Pagination /* *************************************************************** ** 千万数量级分页存储过程 ** *************************************************************** 参数说明: 1.Tables :表名称,视图 2.PrimaryKey :主关键字 3.Sort :排序语句,不带Order