通过链接服务器加入 Table

Joining Table via Linked Server

我有 2 个服务器和 2 个不同的数据库。

S1(服务器)与 DB1(数据库)与 T1(Table)

S2(服务器)与 DB2(数据库)与 T2(Table)

DB1 有一个到 S2 DB2 的链接服务器。

所以我可以运行查询

SELECT * FROM T1 
JOIN [S2].[DB2].[T2] T2
ON T1.[ID] = T2.[ID]

这 运行 正确。

可是,我怎么能运行反方向呢

例如

SELECT * FROM T2 
JOIN [S1].[DB1].[T1] T1
ON T2.[ID] = T1.[ID]

此错误与 "Could not find server [S1].[DB1].[T1]"

我是否可以加入这个方向,而不必创建从 S2 到 S1 的链接服务器?

这个查询:

SELECT *
FROM T2 JOIN
     [S1].[DB1].[T1] T1
     ON T2.[ID] = T1.[ID];

假定 T2 是本地的。你可以做一个混合:

SELECT *
FROM [S2].[DB2].[T2] T2 JOIN
     [DB1].[T1] T1
     ON T2.[ID] = T1.[ID];

可以 link 一个服务器到它自己,所以如果你这样做,你可以 运行 在两个服务器上进行相同的查询:

SELECT *
FROM [S2].[DB2].[T2] T2 JOIN
     [S2].[DB1].[T1] T1
     ON T2.[ID] = T1.[ID];

如果您尝试在两台服务器上执行 "equivalent" 查询,那么同义词可能会有所帮助。您可能对这个问题的 answers 感兴趣。

Gordon 的回答更彻底,但您可以将第二个查询重写为:

SELECT *
FROM [S2].[DB2].[T2] T2
     JOIN T1
ON   T2.ID = T1.ID