假设有表TableA,字段为FieldA, FieldB,查询第10到20条记录,SQL如下:

select * 
from 
    (
        select row_number() over(order by FieldA) as RowNum, * 
        from 
            TableA
    ) t 
where 
  t.RowNum between 10 and 20
Posted on 2007-07-23 16:33 Clark Zheng 阅读(1958) 评论(12)  编辑 收藏 网摘 所属分类: C. DB

Feedback

#1楼    回复  引用  查看    

2007-07-23 16:52 by volnet(可以叫我大V)      
前两天似乎有个哥们提供了3种方法,呵呵

#2楼 [楼主]   回复  引用  查看    

2007-07-23 17:22 by Clark Zheng      
@volnet(可以叫我大V)
地址在哪?偶去看看,有利用Row_Number这个函数的方法吗?

#3楼    回复  引用  查看    

2007-07-23 20:30 by volnet(可以叫我大V)      
http://www.cnblogs.com/didasoft/archive/2007/07/20/sqlserver-paging.html
他是用来分页了,你看看吧

#4楼    回复  引用  查看    

2007-07-23 20:30 by volnet(可以叫我大V)      
这样问不行啊,一般人家看完文章不会回头看第二遍,今天算是刚好了,呵呵

#5楼    回复  引用    

2007-07-23 21:17 by kingwkb [未注册用户]
row_number()我也在用,由于目前数据不多,效率方面看不出来,不知道它的性能如何,谁有时间就做个详细的性能测试吧

#6楼    回复  引用    

2007-07-23 21:36 by Flykye [未注册用户]
这样的话要是有一万条记录的话
不是要先读取1万条
然后在选出其中的10-20条。。
这样不是很浪费资源?

#7楼 [楼主]   回复  引用  查看    

2007-07-24 08:57 by Clark Zheng      
@volnet(可以叫我大V)
谢谢V大

#8楼 [楼主]   回复  引用  查看    

2007-07-24 09:07 by Clark Zheng      
@Flykye
应该不是那样的,这条SQL是在数据库里一次性解析的,不会那么笨全读出来再抽取其中几条滴,我简单看了一样LinQ to SQL里面的实现,好象也是用的这种方法

#9楼    回复  引用    

2007-08-03 09:37 by hello [未注册用户]
能不能删除指定的条数

#10楼    回复  引用    

2007-12-26 10:34 by msn:yinqi025@hotmail.com [未注册用户]
嗯,不错

#11楼    回复  引用  查看    

2008-05-10 21:26 by 金色海洋(jyk)      
怎么都在猜测,而不去测试呢?

#12楼    回复  引用    

2008-09-19 14:27 by 234234 [未注册用户]
from
(select row_number() over(order by customerId desc) as RowNum, * from customer_info_basic) t
where
t.RowNum between 0 and 10

select top 11 * from customer_info_basic where
[customerId] not in
(select top 10 [customerId] from customer_info_basic) order by [customerId] desc

二个语句比较,明显是第1个语句执行效率更高.

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-23 16:37 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: