如何在通用 table 表达式 (CTE) 中引用来自同一服务器内多个数据库的 tables?

How can I reference tables from multiple databases within the same server in a common table expression (CTE)?

我有一个带有多个数据库的 SQL Server 2014 Express。其中之一具有通用 tables,其中包含其余数据库共有的信息(我们称此数据库为 UniversalData)。

其他数据库具有与特定站点相关的信息(我们称这些数据库之一为 Site01Data)。通用数据可能会更改,我不想定期将其复制到其他特定于站点的数据库,因此我想在某些查询中包含 UniversalData table,其中一些涉及 CTE。

我想要完成的事情:

WITH CTE1 AS
(
     SELECT * 
     FROM UniversalData.dbo.someTable
),
CTE2 AS 
(
     SELECT * 
     FROM Site01Data.dbo.anotherTable
), 
CTE3 AS
(
     SELECT CTE1.field1, CTE2.field2 
     FROM CTE1 
     JOIN CTE2 ON CTE1.idx = CTE2.idx
)
SELECT * 
FROM CTE3;

这不会产生错误,但我在最终查询(空结果集)中似乎没有从 CTE1 获得任何数据。直觉上,这是否意味着它在 UniversalData 数据库中保存了一个无法从 Site01Data 数据库访问的临时文件 table?

如何将 CTE 与来自同一服务器上不同数据库的 table 一起使用?

有很多方法可以做到这一点..

您可以将一个数据库中的 table 读入第二个数据库中的临时 table,然后加入它.. 或者即时加入它们。

但首先..不要做select *..指定列

你可以去

select t1.column1,t2.column2

from UniversalData.dbo.someTable t1

inner join Site01Data.dbo.anotherTable t2
 on t2.ida = t2.idx

等等..这取决于您想要指定连接的方式以及您想要选择的连接类型..

这假定两个数据库都在同一个实例上。否则您将需要链接服务器

指定服务器名。site1data.dbo.table 等并在不同服务器名之间适当使用链接服务器