我有一个包含多个数据库的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等,并在不同的服务器名之间使用链接服务器(如果合适(