在解释视图为什么不能用order by时,SQL Server技术内幕中有这么一句:定义视图查询中在没有top或for xml说明符的情况下不能包含order by子句,这是因为视图被认为表示一个表,表是一个逻辑实体,它的行没有顺序,不同于游标,游标是一个物理对象,它可以对行排序.这句话不能理解?
    还有如果说表是一个逻辑实体,它的行没有顺序,那为什么select id,name from ct order by id可以成功地排序呢?

解决方案 »

  1.   

    关于第一个问题:
    定义视图的时候不用order by,但是使用视图的时候可以order by 。把视图当成表就可以了。
    例如table要排序的时候。order by就可以了,没见过create table的时候里面加上order by 的。关于第二个问题:
    它的行本身之间是没有固定顺序的,但是我们得到数据的时候用order by 后就有了顺序了。例如一个班级的学生本来是没有顺序的
    如果我们按照成绩排名,他们就有了顺序。
    如果我们按照身高排名,他们也有了顺序 。
    这个顺序取决于你order by 后面的参数。
      

  2.   


    +1Sql Server存储引擎在存储表时,是用堆来存储的,方便快速写入,堆是无序结构,读取效率低,所以才映入了索引来提高读取效率