从多个数据库创建视图

0 sql-server t-sql

Database X - tableCust - Column-CustNumber
Database Y - tableCust - Column-Custnumber
Datbase Z - tableCust - Column-Custnumber
Run Code Online (Sandbox Code Playgroud)

我正在尝试从这三个数据库中的数据库 H 中创建一个视图,如下所示。

Select Custnumber,Orginal_DB_Name() as DatabaseName
from X.dbo.tablecust
Union 
Select Custnumber,Orginal_DB_Name() as DatabaseName
from Y.dbo.tablecust
;
;
;
etc
Run Code Online (Sandbox Code Playgroud)

但是数据库名称显示的是 Master 而不是他们的 DB_Name。

它需要显示如下输出:

Database_Name CustNumber
X               221
X               1223
Y                122
Y               233
"
"
Run Code Online (Sandbox Code Playgroud)

And*_*y M 5

将每个数据库名称显式指定为字符串:

SELECT
  Custnumber,
  'X' AS DatabaseName
FROM
  X.dbo.tablecust

UNION

SELECT
  Custnumber,
  'Y' AS DatabaseName
FROM
  Y.dbo.tablecust

UNION

...
Run Code Online (Sandbox Code Playgroud)

没有其他办法。毕竟,你必须在表中引用明确指定该数据库名太(X.dbo.tablecustY.dbo.tablecust等等)。

  • 在联合视图中包含这样的常量列对优化器也有帮助。如果您要执行`SELECT * FROM MyView WHERE DatabaseName = 'X'`,您会注意到 SQL Server 足够聪明,可以完全忽略联合的所有其他部分,并且只运行选择列表中具有该值的部分. (2认同)