使用OPENQUERY与动态创建的表

时间:2013-02-26 07:47:50

标签: sql sql-server union-all openquery

我有一个由四部分组成的链接服务器查询,LEFT OUTER使用UNION ALL动态创建一个表,这些内容如下:

SELECT t.column1, rlt.s6, SUM(t.column3) column3
FROM Linked_server.database.schema.table t
    LEFT OUTER JOIN (
        SELECT 1 AS s7, 15 AS s6
        UNION ALL SELECT 3, 1
        UNION ALL SELECT 20, 16
    ) rlt ON (rlt.s7 = t.column2)

工作正常。但是,当我使用OPENQUERY函数运行相同的查询时,就像那样:

SELECT * FROM OPENQUERY(Linked_server, '
    SELECT t.column1, rlt.s6, SUM(t.column3) column3
    FROM database.schema.table t
        LEFT OUTER JOIN (
            SELECT 1 AS s7, 15 AS s6
            UNION ALL SELECT 3, 1
            UNION ALL SELECT 20, 16
        ) rlt ON (rlt.s7 = t.column2)
')

,LEFT OUTER JOIN失败,s6列只包含NULL。我知道我可以重写查询#2以使其工作,但我很好奇为什么它不像它的编写方式那样工作?是因为我不知道OPENQUERY有一些限制吗?

1 个答案:

答案 0 :(得分:1)

无法在我的机器上重现这个...唯一的区别在于两个查询的排序顺序。也许它只是在视觉上看起来因为不同的排序顺序而导致结果集不同。尝试在两个查询中添加ORDER BY rlt.s6 DESC然后运行它们,这应该为您提供具有相同顺序排列的相同记录的结果集。

相关问题