公用表表达式

 有了sql2005后,微软为我们引入了一种全新的表达式,那就是CTE(公用表表达式),可是用with temp as的方式将数据临时取出,然后select这个temp,结合over函数将使我们分页取数据得到质的提升,

                   说明:

                        1、over 相当于聚合函数,只能出现在select阶段和orderby 阶段

                        2、由于with还有其他作用,所以在使用with之前,with之上的sql语句一定要使用“,”结束,虽然sql2005不强制我们使用“,”结束语句,但是这是一个好习惯

            废话少说来看新的存储过程

                  


create proc pageTest1
@pageSize int,
@pageIndex int
as
with temp as
(
select row_number()over(order by po_id ascas rownum,* from po_header)
select * from temp 
    
where rownum between @pageIndex * @pageSize and @pageIndex * @pageSize+@pageSize -1

 

                  看到了吗?代码简单明了,我们使用了select * 和老得存储过程的select po_id,iid_nbr做比较,结果这个新的存储过程取出10条的时间是:00:00:00,几乎不需要时间,这就是差距,也是sql2005带给我们的极大的便利,非常的简单易用,用到了sql2005的一个新特性而已,却解决了我们很大的问题,如果大家还有新的更好的方式欢迎拍砖!

posted @ 2009-05-26 16:31  冰封的心  阅读(150)  评论(0)    收藏  举报