Sql分页查询 20fredrickhu]

发布时间:2016-12-9 16:02:05 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Sql分页查询 20fredrickhu]",主要涉及到Sql分页查询 20fredrickhu]方面的内容,对于Sql分页查询 20fredrickhu]感兴趣的同学可以参考一下。

/* QQ312430633 创建日期:2008-06-25 */  --修改了ORDER BY 需要 percent 与 ORDERBY 失效的BUG-- ---注意'roder by'用一个空格间隔 Create PROCEDURE  [dbo].[les_AllowPaging]  @pageindex int,    ----*****页码 @PageSize int,     ----*****每页显示条数 @tsql varchar(4000)----*****SQL语句 as Declare @SqlSelect  varchar(4000) Declare @orderby  varchar(4000) Declare @AllowPagingSql  varchar(4000)  ---判断是否排序 if CHARINDEX('order by',@tsql) <> 0 begin     set @SqlSelect=replace(substring (@tsql,1, CHARINDEX('order by',@tsql)-1),'$','''')       set @orderby=replace(substring (@tsql, CHARINDEX('order by',@tsql),len(@tsql) ),'$','''')           set @AllowPagingSql=         'select * from (SELECT  ROW_NUMBER() OVER([email protected]+') AS AllowPagingId,* FROM ('+         @SqlSelect         +') as table1) as table2 where AllowPagingId between '         +convert(varchar(10),((@pageindex-1) * @PageSize+1))+' and '         +convert(varchar(10), @pageindex * @PageSize)              exec  (@AllowPagingSql) end  else begin     set @SqlSelect=replace(@tsql,'$','''')       set @orderby=''     set @AllowPagingSql=         'select *  from (SELECT  *,ROW_NUMBER() OVER(ORDER BY orderbyID DESC) AS AllowPagingId FROM  ( select *, 1 as orderbyID from ( '         [email protected]         +' )  as  tbs1 )   as Tabl1 ) as table2 where AllowPagingId between '         +convert(varchar(10),((@pageindex-1) * @PageSize+1))+' and '         +convert(varchar(10), @pageindex * @PageSize)                  exec  (@AllowPagingSql) end set @AllowPagingSql='select  case       when count(*)%'+convert(varchar(10),@PageSize)+'=0 then count(*)/'+convert(varchar(10),@PageSize)+'      when count(*)%'+convert(varchar(10),@PageSize)+'<>0 then count(*)/'+convert(varchar(10),@PageSize)+'+1 end as pageCount,count(*) as RowsCount from ([email protected]+') as tab1' exec  (@AllowPagingSql)

帮顶了 ``

引用 1 楼 jc_liumangtu 的回复:帮顶了 ``

o

引用 1 楼 jc_liumangtu 的回复:帮顶了 ``

学习一下

O

学习中

帮顶,顺便学习

分页代码真是层出不穷啊,呵呵

up

引用 2 楼 pt1314917 的回复:引用 1 楼 jc_liumangtu 的回复: 帮顶了 `` 

引用 9 楼 sp4 的回复:分页代码真是层出不穷啊,呵呵 元甲说的即是

引用 10 楼 lass_name 的回复:up

[email protected] 不是一个select 语句,而是一个存储过程,这个存储过程返回一个表,好像不行,不知道怎么样改进。

收藏了.谢谢了,学习了!

多顶一下,看下有什么差别!!

呵呵,同时代人啊

頂一下。

收藏了!!太强了哈!

帮顶了.........

学习下,正在考虑这方面的问题。

请解释一下,分页查询的意义,是不是将查询结果按第页几行的方式显示

如果需要Join好几个表,不知道还行不行?

一定要在 SQL做分頁麼?

收藏了。

sql server 2005?

ROW_NUMBER() OVER(ORDER BY xx) 我在sql server2000中没有见过此类函数,oracle中有!应该是sql server2005开始支持了!但是楼主不知道有没有考虑过,这种分页的性能不是太好!从执行计划来看应该是 table full scan!

学习一下!

学习了,不过效率真的不是很好

呵呵,经典之作。。。。

得到错误: 服务器: 消息 195,级别 15,状态 10,行 1 'ROW_NUMBER' 不是可以识别的 函数名。 服务器: 消息 156,级别 15,状态 1,行 1 在关键字 'as' 附近有语法错误。 (所影响的行数为 1 行) 刚好需要这样函数却发现楼主的这个有错误。

汗,原来应该是sql2005才行的。

wo ye lai 

    set @SqlSelect=replace(substring (@tsql,1, CHARINDEX('order by',@tsql)-1),'$','''')       set @orderby=replace(substring (@tsql, CHARINDEX('order by',@tsql),len(@tsql) ),'$','''')   这里为什么要替换一下$符号为单引号呢,请问下楼主是何用意

可以啊

注释写多点啊,照顾照顾初学者吗,代码易于阅读才是好风格

只理解了一半...

看不懂!

学习

顶了, 学习中..对我帮助很大.

收藏~

学习一下 

上面的语句写的有点复杂,对在传递参数的时候可以不用传递sql ,采用传参数的方式跟安全 ,采用sql太容易被注入 攻击,我个人建议传参就好了 

学习

现在的分页网上实在是太多了。你的这个不够完全。

up

没办法的办法...... create PROCEDURE  [dbo].[p_AllowPaging_Ex]  @pageindex int,    ----*****页码 @PageSize int,     ----*****每页显示条数 @tsql varchar(4000),----*****SQL语句 @PageCount int output, ----返回页数 @RecCount int output--返回记录条数 as /* 输入参数:@pageindex int, [email protected] @PageSize int, 每页显示条数 @tsql varchar(4000)         SQL语句 输出参数:@PageCount int 总页数 @RecCount int 总记录条数 功能:根据提交的sql语句,按照参数返回翻页查询的结果集. */ declare @tabname varchar(100),@dropsql varchar(1000),@execsql varchar(100) --临时表表名 set @tabname = 'Temp'+replace(cast(host_name() as varchar),'-','') set @dropsql='if exists (select * from sysobjects where name = [email protected]+''') drop table [email protected] exec(@dropsql) [email protected],并产生自动编号 select @tsql=left(@tsql,charindex('from',@tsql)-1)+',AllowPagingId=identity(int,1,1) into [email protected]+' '+substring(@tsql,charindex('from',@tsql),len(@tsql)-charindex('from',@tsql)+1) exec (@tsql) --获得页数 declare @count int set @count=@@rowcount --获得记录数 set @[email protected] select @PageCount = case when @[email protected]>0 then @[email protected]+1 else @[email protected] end set @execsql = 'select * from [email protected]+' where AllowPagingId between '+cast(@PageSize*@pageindex-@PageSize+1 as varchar)+' and '+cast(@[email protected] as varchar) exec (@execsql) exec(@dropsql)

看看先!!!!!!!!!!!

学习了

up

学习~

该回复于2009-10-11 09:02:55被版主删除

上一篇:黑客给出的十大安全建议 20fredrickhu]
下一篇:谁能准确解释一下 insert bulk 语句的功能,文档中没有 50Cool_Sword]

相关文章

相关评论