代码之家  ›  专栏  ›  技术社区  ›  TonE

在链接服务器上使用Top()进行SQL子查询时出现问题

  •  4
  • TonE  · 技术社区  · 17 年前

    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
    

    当与dbo一起使用时,这会按需工作。客户和dbo。本地SQL Server实例上的订单。它返回订单表中从Customers表返回的前10个customerId的所有行,即1688行。

    我不是SQL专家,所以我不明白为什么它的行为应该有所不同。

    2 回复  |  直到 17 年前
        1
  •  4
  •   RBarryYoung    17 年前

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

    在子查询中添加ORDER BY子句,以便使该部分保持一致和稳定,其余部分可以正确跟随。

        2
  •  0
  •   Rabid    17 年前

    首先,你缺乏 ORDER BY

    table_source FROM 条款),如果没有,试着玩 join hint REMOTE .