如何在通用 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 等并在不同服务器名之间适当使用链接服务器
我有一个带有多个数据库的 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 等并在不同服务器名之间适当使用链接服务器