如何获得有序视图?

时间:2010-11-10 15:41:53

标签: tsql sql-server-2008

我的'VIEW'已订购。但是当我使用select来显示其结果时,输出会被洗牌。 使用以下语句

也会发生此行为
SELECT * FROM (SELECT * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE

如何防止这种混乱?

3 个答案:

答案 0 :(得分:3)

不幸的是,无法在SQL Server中排序视图。您必须在阅读视图的select语句中执行此操作。

拉姆,我知道。

答案 1 :(得分:2)

您必须在使用该视图的最外层选择中只有ORDER BY

SELECT * FROM (SELECT * FROM TABLE) AS DERIVEDTABLE ORDER BY YourColumn

除非你使用TOP

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE

但是,除非您通过以下方式添加其他订单,否则最终排序顺序仍可能会根据外部查询而改变:

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE
ORDER BY COLUMNA

答案 2 :(得分:1)

你做不到。指定订单的唯一方法是在查询的最外层请求它 - 这是ORDER BY用于订购最终结果集的唯一位置。 ORDER BY的任何其他用途仅用于协助其他操作(例如定义使用TOP时“TOP 10”的内容。)

SQL Server 2000曾经被欺骗在视图中应用ORDER BY,不幸的是,企业管理器和SSMS中的视图设计者继续假装这种方法有效。它没有。通过不再允许该技巧工作,这可能会为查询优化提供更多机会。