查看: 12088|回复: 2

【编程】sql server动态存储分页

[复制链接]
发表于 2013-11-6 21:30:38 | 显示全部楼层 |阅读模式
题外话:这文章很少见,注意我说的是内容不与网上的相同,网上关于存储过程分页一找一大堆,但是我的这个真的是自己写出来,当然不是我创造出来,本来就有这种函数,但是这种思想不错,资料来源于英文网站。

文章我发表过一次,有人转载过一次,我就看到过在网上出现两次,但是这两个网站好像现在打不开,我觉得这文章拿出来分享。

这里主要是sql server 数据库

[SQL] 纯文本查看 复制代码
--这里建一个执行我们想要数据总的结果查询sql语句存储过程
if object_id(N'PageSQL') is not null
	drop proc PageSQL
go
create proc PageSQL
(
	@sqlstr nvarchar(100)
)
as
begin 
	exec sp_executesql @sqlstr
end
go
--这里再建一个把我们执行结果后的数据进行分页的存储过程
if object_id(N'Page') is not null
	drop proc Page
go
create proc Page
(
	@pagesize int,--页面大小
	@pagenum int,--页码
	@filed varchar(20)--列名
)
as
begin
	Exec sp_serveroption 'lenovo-d35fdba5','Data Access',True  --这句是设置sql server 也可以在下面设置
	declare @sql nvarchar(200)
	declare @num int
	set @num=(@pagesize*(@pagenum-1))
	set @sql='select top '+Convert(nvarchar(10),@pagesize)+' * from #T where ('+@filed+' not in (select top'+Convert(nvarchar(10),@num)+' '+@filed+' from #T order by '+@filed+'))order by '+@filed
	exec sp_executesql @sql
end
go

--Exec sp_serveroption 'lenovo-d35fdba5','Data Access',True
Select *  INTO #T From OpenQuery([lenovo-d35fdba5],'QTFLW.dbo.PageSQL''select * from T_UserInfo''') --这里面就是我们想要执行的sql语句,当然多表也是可以的(我主要是执行我们任何的sql语句),为什么网上有那么多,不去用,原因就是当有多表时,就会出现问题。这里技术要点也就是这个OpenQuery函数。

exec Page 2,3,'UserName'  --这里执行第二个存储过程,就能对我们的结果进行想要的分页.


思路:就是把sql语句执行的结果先放入一个临时表,再对临时表进行分页...按正常思路写出语句是没有用的,。。大家可以去试试~~所以才说这个在网上真的很难找到。
回复

使用道具 举报

头像被屏蔽
发表于 2013-11-7 03:30:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-7 07:44:42 | 显示全部楼层
a88166666 发表于 2013-11-7 03:30
不懂怎么办

那我也没办法
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-3-9 10:09 , Processed in 0.027760 second(s), 14 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部