2017-08-24 42 views
-1

我已經在SQL Server中創建了一個視圖,該視圖正確運行並按我的需要進行排序。下面是這個視圖...在視圖中使用順序

CREATE VIEW [vwInventoryList] 
AS 

SELECT TOP 100 PERCENT x.[Cols_I_Need] 

FROM dbo.vwInventoryListSummary x 

GROUP BY x.[columns] 
ORDER BY dbo.x.ID,dbo.x.[Description],[with_more_4_cols] 
GO 

的問題是,當我執行從C#或者甚至在SQL Server Management Studio中的SQL之下,正如我在視圖指定的結果沒有排序,我不理解爲什麼。

Select * from vwInventoryList 

我想視圖以控制數據和我的代碼(select語句)的排序從所述視圖,而無需通過在C#代碼指定的順序應該簡單地選擇。

任何想法爲什麼會發生這種情況?

+3

視圖無法排序。使用'SELECT * FROM [vwInventoryList] ORDER BY..' – lad2025

+2

[爲什麼ORDER BY不屬於視圖? - dba.se回答Aaron Bertrand](https://dba.stackexchange.com/a/21437/43889) – SqlZim

+2

如果你想玩醜陋的'SELECT TOP 1000000 ... ORDER BY'而不是'SELECT TOP 100 PERCENT..'來強制中間實現 – lad2025

回答

1

請參閱Create a view with ORDER BY clause瞭解視圖中的order by子句。這非常有幫助。一種您不必在C#代碼中使用訂單的方法是創建一個調用此視圖的存儲過程。在此過程中,你可以把下面

SELECT * FROM [vwInventoryList] ORDER BY {Column} 

它使從select語句變得斑斑點點的C#代碼,並允許您更好地跟蹤程序的SQL。最終取決於你。有關何時使用sql inline vs stored procs的更多信息,另請參閱What are the pros and cons to keeping SQL in Stored Procs versus Code