Azure SQL - 通过多个数据库查询创建视图

Posted

技术标签:

【中文标题】Azure SQL - 通过多个数据库查询创建视图【英文标题】:Azure SQL - Create view with query through multiple databases 【发布时间】:2016-05-31 13:57:28 【问题描述】:

我有两个不同的数据库,我需要来自两个数据库的信息。我设法得到这样的数据:

create master key encryption by password = 'test'

create database scoped crendetial testcredentials with identity = 'secret@login', secret = 'secret@password'

-- CREATE DATA SOURCE --
create external data source RemoteDataSource with
(
    type = RDBMS,
    location = 'secret.database.windows.net',
    database_name = 'testDB_Dev',
    credential = testcredentials
)

-- CREATE TABLES --
create external table [RemoteDepartment]
(
    [ID] [int],
    [Name] [nvarchar](50)
)
with
(
    data_source = RemoteDataSource,
    schema_name = 'dbo',
    object_name = 'Department'
);

从这里我现在可以selectjoin 等等。 (Employee 表来自另一个数据库(我正在查询的那个)

select e.Name, e.Role, d.Name from Employee as e inner join
    RemoteDepartment as d on d.ID = e.DepartmentId

输出如下

|---Name---|---Role---|---Name--|
|  Louise  |  Manager |    HR   |
|    Tim   | Finances |  Admin  |

这是我的问题。虽然这一切都非常好和快速,但我似乎无法绕开我的脑袋,或者在网上找到任何资源,关于如何使用这种查询两个单独数据库的方法来创建视图。

我尝试了以下方法:

create master key encryption by password = 'test'

create database scoped crendetial testcredentials with identity = 'secret@login', secret = 'secret@password'

-- CREATE DATA SOURCE --
create external data source RemoteDataSource with
(
    type = RDBMS,
    location = 'secret.database.windows.net',
    database_name = 'testDB_Dev',
    credential = testcredentials
)

-- CREATE TABLES --
create external table [RemoteDepartment]
(
    [ID] [int],
    [Name] [nvarchar](50)
)
with
(
    data_source = RemoteDataSource,
    schema_name = 'dbo',
    object_name = 'Department'
);

CREATE VIEW test_view AS
    select e.Name, e.Role, d.Name from RemoteEmployee as e inner join
        RemoteDepartment as d on d.ID = e.DepartmentId 

但是得到一个编译错误提示

语法错误:'CREATE VIEW' 必须是批处理中的唯一语句

我尝试删除除 select 语句之外的所有内容,但这不起作用(编译器不知道 RemoteDepartment 实际上是什么

【问题讨论】:

对不起,你说你有两个不同的数据库,但我在一个数据库中只看到2个表testDB_Dev 当然可以。我对帖子进行了编辑。表Employee 来自被查询的数据库。我的道歉 我建议你在一个数据库中创建2个表,否则使用2个数据库浪费太多资源 我非常清楚这一点,但我无法更改架构。我和我的团队已经在这些数据库上运行了大量服务,我们不能花时间来改变架构。我知道架构很奇怪(我没有造成这种混乱),但这不是这个问题的意义所在。不过,我很感谢您的评论。 【参考方案1】:

这听起来只是一个简单的案例,无法使用 Azure SQL 数据库实例进行跨数据库查询。

【讨论】:

但我可以吗?你读过我写的吗?我可以获取数据,但我无法创建视图。

以上是关于Azure SQL - 通过多个数据库查询创建视图的主要内容,如果未能解决你的问题,请参考以下文章

Azure SQL 数据库 - 交叉引用 DB 查询 - SP

如何在 Synapse (Azure SQL DW) 上检索视图定义?

从多个查询创建视图

[QT][SQL]sql学习记录5_sqlite视图(View)

为啥我不能从 azure data studio 或 databricks 查询突触无服务器视图?

为查询创建优化的 Azure SQL 表