200分求 分页思路疑问 1000万条记录发布读取内存错误 我也不是很明白,说一下吧,有个疑问,你存储过程中是怎么提取第多少条记录的,不是用TOP 来控制的吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --你可以试试SQL自带的分页/*--利用SQL未公开的存储过程实现分页 方法简单且效率高,已知的问题就是要多返回一个空的记录集 解决的方法是在前台调用时,用 set recordset=recordset.nextrecordset 的方法跳过第一个记录集 此方法由J9988提供,我只是将它改成了方便调用的存储过程--邹建 2004.05(引用请保留此信息)--*//*--调用示例 exec p_splitpage 'select id,name from sysobjects where xtype=''U'' order by id',1,5--*/create procedure p_splitpage @sql nvarchar(4000), --要执行的sql语句@currentpage int=2, --要显示的页码@pagesize int=10, --每页的大小@pagecount int=0 out --总页数asset nocount ondeclare @p1 intexec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount outputselect @pagecount=ceiling(1.0*@pagecount/@pagesize) ,@currentpage=(@currentpage-1)*@pagesize+1exec sp_cursorfetch @p1,16,@currentpage,@pagesize exec sp_cursorclose @p1go 得到最后一页的余数declare @Jlsum int --记录总数declare @yysum int --最后一页的记录余数select @jlsum = count(*) from tab_bar_barcodeselect @yysum = @jlsum -6000*(页的总数-1)--或者select @yysum = @jlsum%6000 这样用的邹建大侠 exec p_listPage'tab_bar_barcode ','*','brbc_barcode',6000,2,0,'' 这是存储过程提取的第二页的条数为6000的记录 参数说明@tblName varchar(1000), -- 表名@strGetFields varchar(1000) = '*', -- 需要返回的列@fldName varchar(255)='', -- 排序的字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) 用你的存储过程更好用,我的问题是我怎样做一个循环把原来的select * from tab_bar_barcode 分成若干步奏传完,但是让客户看到的是一次性所有的数据还等同于select * from tab_bar_barcode ,因为我要分批把他转换成xml 这样就没有必要用分页,直接查询就行了因为SQL会自动分批传输数据到客户端,除非你的网络不好. 谢谢,邹大侠,但是我用的是java的webservice ,客户端用的是delphi,他们之间的数据传输用的是xml格式,如果客户提取超过10万条记录,系统就会报错,因为我要把得到的数据转换成xml放到一个字符窜缓存中,因为他有限制的我现在分页是为了把这些数据分批地传给客户端显示,但给客户的感觉还是一次传给客户 ,实际上分批地处理成xml再次谢谢 邹大侠尽量帮我想想,我实在因为这个项目交不了差 这个SQL语句怎么写呢? 关于Integration Services 的问题 COLUMNS_UPDATED()&01。。。。什么意思啊? 紧急救命,日期格式。。 急需一条动态连接表的sql语句,求各位高手解答? 碰到的一个SQL难题 SQL多语言插入乱码,请帮忙看看 请问哪个版本的SQL SERVER支持英文XP PRO 系统? 请教DTS导入时引用本地表为查询条件的问题 请问用存储过程如何写? MS-SQL运行速度好慢,只求答案 关于两个表的记录统计问题,我已经结帖,但是发现有问题,所以再问一次
/*--利用SQL未公开的存储过程实现分页
方法简单且效率高,已知的问题就是要多返回一个空的记录集 解决的方法是在前台调用时,用 set recordset=recordset.nextrecordset
的方法跳过第一个记录集
此方法由J9988提供,我只是将它改成了方便调用的存储过程--邹建 2004.05(引用请保留此信息)--*//*--调用示例
exec p_splitpage 'select id,name from sysobjects where xtype=''U'' order by id',1,5
--*/
create procedure p_splitpage
@sql nvarchar(4000), --要执行的sql语句
@currentpage int=2, --要显示的页码
@pagesize int=10, --每页的大小
@pagecount int=0 out --总页数
as
set nocount on
declare @p1 intexec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount outputselect @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@currentpage,@pagesize
exec sp_cursorclose @p1
go
declare @Jlsum int --记录总数
declare @yysum int --最后一页的记录余数
select @jlsum = count(*) from tab_bar_barcode
select @yysum = @jlsum -6000*(页的总数-1)
--或者
select @yysum = @jlsum%6000
'tab_bar_barcode ',
'*','brbc_barcode',6000,2,0,'' 这是存储过程提取的第二页的条数为6000的记录
@tblName varchar(1000), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
select * from tab_bar_barcode 分成若干步奏传完,但是让客户看到的是
一次性所有的数据
还等同于select * from tab_bar_barcode ,因为我要分批把他转换成xml
xml格式,如果客户提取超过10万条记录,系统就会报错,因为我要把得到的数据转换成xml放到一个字符窜缓存中,因为他有限制的
我现在分页是为了把这些数据分批地传给客户端显示,但给客户的感觉还是一次传给客户 ,实际上分批地处理成xml再次谢谢 邹大侠尽量帮我想想,我实在因为这个项目交不了差