簡體   English   中英

VIEW中的ORDER BY返回不同的結果SQL

[英]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

也許你沒有在其中一台服務器上獲得此修補程序?

http://support.microsoft.com/kb/926292

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM