如何通过Visual Studio / SSDT将外部表添加到Azure SQL DB

时间:2019-06-26 19:35:22

标签: sql visual-studio azure sql-server-data-tools

我的问题是,如何开发使用外部表的数据库项目并将其部署到Azure SQL DB?

我正在使用Visual Studio 2017数据库项目来管理Azure SQL数据库。我一直遵循在VS中建立数据库的路径,然后单击“发布”按钮,效果很好。

现在,我正在尝试添加外部表来执行弹性查询。在SSMS中,我为其创建了外部数据源和凭据以及一个远程表:

CREATE EXTERNAL DATA SOURCE [RemoteServer] 
    WITH (TYPE = RDBMS, LOCATION = N'myserver.database.windows.net',
     CREDENTIAL = [RemoteUser], DATABASE_NAME = N'MyRemoteDb')
GO

CREATE EXTERNAL TABLE dbo.MyTable (
     ID int not null,
    MyColumn varchar(10) not null
)  WITH (
    DATA_SOURCE = [RemoteServer]
    );
GO

(还存在RemoteUser的凭据。)

SELECT * FROM MyTable  

产生预期的结果,世界上一切都很好。

现在,我要将其添加到我的数据库项目中,以便可以通过发布(在VS中)进行部署以用于将来的任何更改(并保存在源代码管理中)。

我遇到了错误:

SQL71501: External Data Source: [RemoteServer] has an unresolved reference to Database Scoped Credential [RemoteUser].

我可以通过将所有外部片段的属性设置为不构建来消除该错误,但这违背了可以从Visual Studio发布的目的。 我尝试过从数据源中删除凭据,因此该凭据不存在。它删除了该错误,但是由于缺少凭据而导致发布失败:

CREATE EXTERNAL DATA SOURCE [RemoteServer] 
    WITH (TYPE = RDBMS, LOCATION = N'myserver.database.windows.net',
    DATABASE_NAME = N'MyRemoteDb')
GO

 SQL72014: .Net SqlClient Data Provider: Msg 46505, Level 16, State 15, Line 1 Missing required external DDL option 'CREDENTIAL'.)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在撰写本文时,Azure 中的弹性查询仍处于预览阶段,Microsoft 在概述页面中列出了许多限制。不幸的是,其中之一是关于通过 SSDT 编写外部表和外部数据源的脚本。注意到 here(有关 SSDT,请参阅列表中的第二项)。