2010-11-19 38 views
4

我的DBA告诉我,在SQL视图中不可能有OrderBy。可能在视图中有OrderBy?

我遇到了需要按特定顺序查看第三方组件的问题。这是真的?我无法在视图中排序吗?

+3

“需要以特定顺序显示视图的第三方组件”是令人讨厌的。 – Tony 2010-11-19 17:42:45

回答

9

SQL Server视图不尊重order by s。有黑客*让他们工作,但他们没有记录,我建议不要依赖他们在未来的修订中正常工作。

如果您想订购一个视图,正确的方法是将order by放入正在读取视图的select中。

这是一个普遍被误解的观点。所以,参考文献:An article,MSDN

* - order by s支持top条款。所以,你理论上可以做一个select top 100%。这是错误的。服务器不保证该视图将保持有序。这仅受支持,因此您可以正确指定确切包含哪些顶行。对于某些查询顺序的保留,但它完全是一种侥幸,如果你依赖它,你将有乐趣追踪最终会在订单不被保留时弹出的错误。无法保证视图的排序。

+0

我正在查看“with ties”选项。这可能会在短期内解决这个问题,但是我的ASP.NET对象应该通过声明来发布和排序。我会看看我能做什么。 – LamonteCristo 2010-11-19 18:47:30

+0

+1用于解释顶级100%怪异。 – Axn 2010-11-19 20:17:08

4

通常,SQL Server将在视图中反对ORDER BY。您可以通过在查询中包含TOP子句来作弊,然后允许ORDER BY。

+1

+1:确切的语法是'SELECT TOP(100)PERCENT ...',实际上在用ORDER BY定义视图时会自动插入。现在,关于在视图中需要ORDER BY的争论是另一个问题...... :) – Tony 2010-11-19 17:41:20

+0

请参阅上面的答案。这不符合你的想法。 – Donnie 2010-11-19 17:46:48

+0

@Donnie:谢谢。今天我学到了一些新东西,但我必须承认,我从来没有看到过这种方式在实际应用中不起作用。很想看看我能否构建一个失败的例子。 – 2010-11-19 19:49:32

0

我也会说:因为你可以从视图中排序选择。 但有人可以解释我在MSDN上找到here ?:

ORDER BY子句不在 观点,内联函数有效,衍生 表和子查询,除非TOP是 指定。

+0

请参阅下面的答案。 – Donnie 2010-11-19 17:42:53

0

您的DBA可能担心您需要或希望获得索引视图,这会降低插入和更新速度。

相关问题