gpt4 book ai didi

sql - VIEW中的ORDER BY返回不同的结果SQL

转载 作者:行者123 更新时间:2023-12-04 22:50:09 25 4
gpt4 key购买 nike

这是我的 View :

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 Standard Edition v. 8.00.2055) x64 上运行它时,我以正确的顺序得到了我想要的结果。

但是当我在 (Microsoft SQL Server Standard Edition v.10.50.1702.0) x86 上运行它时,我没有得到相同的结果。当我运行 VIEW 时,它就像忽略 ORDER BY 语句一样。如果我只是运行 SELECT 语句,另一方面我会以正确的顺序获得正确的结果。
两台服务器上的数据库和脚本完全相同。

请帮我!

最佳答案

如果您需要 ORDER BY对于结果,您需要输入 ORDER BYSELECT从观点来看。
ORDER BY View 内部仅用于控制 TOP适用于[STD_USER].[Transexport]分支不是为了在针对 View 的选择操作中的最终结果顺序。

TOP 100 Percent ORDER BY Considered Harmful.对此的更多解释。

编辑 虽然最后ORDER BY的角色很有趣。变化取决于它是否在 View或不。当SELECT在 View 之外运行它用于对整个结果进行排序,并且它在限制 TOP 中的作用对于 UNION 的最后一个分支消失。

编辑 2 this recent 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

Plan

关于sql - VIEW中的ORDER BY返回不同的结果SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com