4

我正在使用 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 的 orders 表中的所有行 - 1688 行。

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

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

任何建议表示赞赏。

4

2 回答 2

4

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

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

于 2009-09-10T15:07:50.567 回答
0

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

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

于 2009-09-10T15:20:14.880 回答