【发布时间】:2011-11-25 15:15:13
【问题描述】:
这是我的观点:
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 语句,我会以正确的顺序获得正确的结果。 数据库完全相同,两台服务器上的脚本也完全相同。
请帮帮我!
【问题讨论】:
-
UNION的前 2 个分支将返回不确定的结果。你也需要一个ORDER BY来表示TOP 999999按什么排序(除非你的行数少于那个数,并且它只是用来尝试创建 SQL Server 2000 有序视图?)
标签: sql view sql-server-2000 sql-order-by