首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

应该是很简单的事,关于SQL2005的视图浏览不排序有关问题

2013-12-13 
应该是很简单的事,关于SQL2005的视图浏览不排序问题首先我用的sql2005的自带Management Studio。我对一张含

应该是很简单的事,关于SQL2005的视图浏览不排序问题
首先我用的sql2005的自带Management Studio。
我对一张含有商品名(iName)、价格(iPrice)、价格录入时间(iTime)的表(tPrice)做了一些筛选,建了一个视图(vPrice)。这个视图差不多就是
SELECT * FROM tPrice where iPrice>10000 order by iName,iPrice DESC
这样应该是很简单的事,关于SQL2005的视图浏览不排序有关问题
但是我在管理器的视图上右键点打开视图的时候,排序是乱的,一定要在sql视图里的SELECT * FROM vPrice 后面手动加上 order by iNamemiPrice DESC 方才排好序。应该是很简单的事,关于SQL2005的视图浏览不排序有关问题

这尼玛不科学啊~~~~~那我在建视图的时候加的order by给吃了么!!!应该是很简单的事,关于SQL2005的视图浏览不排序有关问题
[解决办法]
在视图中是不允许有order by的,除非select 中有 top 才行,比如下面的就报错了:

create view dbo.v_wc
as

select *
from sys.objects
order by name desc
go
/*
消息 1033,级别 15,状态 1,过程 v_wc,第 9 行
除非另外还指定了 TOP 或 FOR XML,否则,
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
*/


[解决办法]
如果是TOP 100 percent,order by不起作用;如果是top 100,order by 是起作用的吧
[解决办法]
select top 100 percent * from tb order by xxxx 可行的
[解决办法]
我记得2000 视图中排序是好使的,2005以后视图中的order by是不好用的,排序还是写在程序中吧
[解决办法]
引用:
经过大家提醒,总结如下:
原来的select top (100) percent 是乱的;
改成select top 100 percent 也不行;
改成select top 100 可行;

最后的做法:select top 9999999999 可行。
就这样凑合用了还是怎么着?


你这些行或者不行的其实都是不行的。 你看似行的这些,可能由于sql在查询时底层的算法的输出刚好与排序项一致。 下次在别的场合又可能不对。

联机丛书已经很明确的说出了这一点:


ORDER BY 子句仅用于确定视图定义中的 TOP 子句返回的行。ORDER BY 不保证在查询视图时得到有序结果,除非在查询本身中也指定了 ORDER BY。

我们从这句话,得到的结果只能是下面两点:

1,  视图创建语句里的order by 只是为了保证得到的记录按top 的输出,并不是为了排序。
2,  要得到正确的排序,需要在调用视图的查询语句里加order by.


说白了, 等同于以下

select * from (select  top 100 * from ta order by id)
这句话的结果,可能是按id排序,也可能不是。 跟具实际的存储、底层的算法优化都有关系.

热点排行