[英]ORDER BY in VIEW returns different results SQL
這是我的viww:
CREATE VIEW [STD_USER].[view_TransInvoice]
AS
SELECT TOP 999999 Customernr, Referensnr,'2' as a, InvoiceRowData, FileHead
FROM [STD_USER].[Transexport]
WHERE InvoiceRowData IS NOT NULL
UNION
SELECT TOP 999999 Customernr, Referensnr,'1' AS a , InvoiceHead , FileHead
FROM [STD_USER].[Transexport]
WHERE InvoiceHead IS NOT NULL
UNION
SELECT TOP 999999 Customernr, Referensnr,'3' AS a , InvoiceFoot , FileHead
from [STD_USER].[Transexport]
WHERE InvoiceFoot IS NOT NULL
ORDER BY Customernr, Referensnr, 3
當我在服務器(Microsoft SQL Server標准版v.8.00.2055)x64上運行它時,我得到了我想要的正確順序的結果。
但是當我在(Microsoft SQL Server標准版v.10.50.1702.0)x86上運行它時,我得不到相同的結果。 我喜歡在運行VIEW時忽略ORDER BY語句。 如果我只是運行SELECT語句,另一方面我會以正確的順序獲得正確的結果。 兩個服務器上的數據庫完全相同,腳本也是如此。
請幫我!
如果結果需要ORDER BY
,則需要在視圖中的SELECT
放置ORDER BY
。
View中的ORDER BY
僅用於控制TOP
應用於[STD_USER].[Transexport]
分支的內容,而不是針對視圖的select操作的最終結果順序。
見前100%ORDER BY認為有害。 有關此問題的更多解釋。
編輯雖然最終ORDER BY
的角色根據它是否在View
而改變,但這很有意思。 當SELECT
在View之外運行時,它用於對整個結果進行排序,並且它在限制UNION
的最終分支的TOP
的作用消失。
編輯2這個奇怪的行為在最近的Connect Item的評論中討論
CREATE TABLE A (C VARCHAR(100))
CREATE TABLE B (C VARCHAR(100))
SELECT TOP 1000 C
FROM A
UNION ALL
SELECT TOP 1000 C
FROM B
ORDER BY C
GO
CREATE VIEW V
AS
SELECT TOP 1000 C
FROM A
UNION ALL
SELECT TOP 1000 C
FROM B
ORDER BY C
GO
SELECT *
FROM V
GO
DROP TABLE A
DROP TABLE B
DROP VIEW V
我不相信你應該在VIEW
設置ORDER BY
來訂購數據。 視圖輸出一組數據,然后可以查詢這些數據。
這應該在查詢視圖時完成。
SELECT *
FROM [view_TransInvoice]
ORDER BY Customernr, Referensnr, a
也許你沒有在其中一台服務器上獲得此修補程序?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.