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

如何通过VisualStudio/SSDT将外部表添加到Azure SQL DB,sql,visual-studio,azure,sql-server-data-tools,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'mys

我的问题是,如何在使用外部表的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的凭据也存在。)

产生了预期的效果,世界上一切都很好

现在我想把它添加到我的数据库项目中,这样就可以通过发布(在VS中)来部署它,以便将来进行任何更改(并保存在源代码管理中)

我得到一个错误:

SQL71501: External Data Source: [RemoteServer] has an unresolved reference to Database Scoped Credential [RemoteUser].
我可以通过将所有外部片段的属性设置为“不构建”来消除错误,但这违背了从VisualStudio发布的目的。 我已尝试从数据源中删除凭据,因此它不存在。它删除了错误,但由于缺少凭据,发布失败:

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'.)

有什么建议吗?

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

我会尝试其他方法1)使用SSMS上的脚本在开发数据库上部署所有内容2)使用模式比较查找数据库和项目之间的所有更改3)基于模式比较更新项目。这样你就可以得到所有必要的组件。@LukaszSzozda不幸的是,这不起作用。返回数据库作用域凭据的SQL 71501未解决引用错误(该错误不会从架构比较中提取,因为它是服务器对象,而不是数据库对象。)Hi@Rahn,您找到解决该问题的方法了吗?Thanks@LorenzoBenassi,不,我还是不知道。根据你的其他评论,我不想走另一条路,因为我想在源代码管理中存储信息。(我还没有准备让外部表为它们创建的表编写脚本。)我通过右键单击“安全>添加>新建项…>凭证”解决了此错误
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'.)