2010-11-19 22 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可能擔心您需要或希望獲得索引視圖,這會降低插入和更新速度。

相關問題