繁体   English   中英

在链接服务器上使用Top()的SQL子查询问题

[英]Problem with SQL subquery using Top() on Linked Server

我正在使用SQL Server 2008,我有以下SQL脚本:

Select o.CustomerId as CustomerNoId, OrderValue, OrderDate
From dbo.Orders as o
Inner Join (
    Select Top (10) CustomerId
    From dbo.Customers
    where Age < 60
)
As c
On c.CustomerId = o.CustomerId

当与本地SQL Server实例上的dbo.Customers和dbo.Orders一起使用时,它可以按需运行。 它返回从Customers表返回的前10个customerIds的订单表中的所有行--1688行。

但是我有一个链接服务器,其中包含包含更多行的Customers和Orders表。 当我修改脚本以使用链接服务器中的dbo.Orders和dbo.Customers表时,我得到一个奇怪的结果 - 看起来返回了正确的数据,但只返回它的前10行。

我不是SQL专家所以我无法弄清楚为什么它应该有不同的行为。

任何建议赞赏。

在您的子查询中有一个TOP(10)并且没有ORDER BY来启动,这意味着您不能保证每次都获得相同的10行(对于链接服务器尤其如此,因为可能使用的算法不同用于校对匹配,即使校对是相同的)。

将ORDER BY子句添加到子查询中,以便您可以使该部分保持一致且稳定,其余部分可以正确遵循。

首先,正如@RBarryYoung指出的那样,缺少ORDER BY子句会使您的子查询不确定。

其次,我首先尝试更改连接顺序(子查询成为FROM子句的第一个table_source对象),如果没有,尝试使用连接提示 REMOTE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM