如何在公共表表达式(CTE)中引用同一服务器内多个数据库中的表



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

其他数据库具有与特定站点相关的信息(让我们将其中一个数据库称为Site01Data(。通用数据可能会更改,我不想定期将其复制到其他特定站点的数据库,所以我想在一些查询中包括UniversalData表,其中一些查询涉及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数据库访问的临时表?

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

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

您可以将一个数据库中的表读取到第二个数据库上的临时表中,然后连接到它。或者动态连接这两个表。

但首先。。不要做选择。。指定列

你可以去

select t1.column1,t2.column2
from UniversalData.dbo.someTable t1
inner join Site01Data.dbo.anotherTable t2
on t2.ida = t2.idx

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

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

指定servername.site1data.dbo.table等,并在不同的服务器名之间使用链接服务器(如果合适(

最新更新