Sql server 使用Azure特定功能时在本地运行SQL Server数据库?

Sql server 使用Azure特定功能时在本地运行SQL Server数据库?,sql-server,azure,azure-sql-database,azure-sql-server,Sql Server,Azure,Azure Sql Database,Azure Sql Server,我正在考虑将使用本地SQL Server的项目迁移到SQL Azure。该数据库具有跨数据库依赖关系,其中某些视图引用同一服务器上的另一个数据库,这是SQL Azure不支持的 我已成功地将这些表修改为使用使用外部数据源的外部表,该外部数据源是使用以下方法创建的: CREATE EXTERNAL DATA SOURCE [MyExternalDataSource] WITH ( TYPE = RDBMS, LOCATION = 'SqlServerName', DATAB

我正在考虑将使用本地SQL Server的项目迁移到SQL Azure。该数据库具有跨数据库依赖关系,其中某些视图引用同一服务器上的另一个数据库,这是SQL Azure不支持的

我已成功地将这些表修改为使用使用外部数据源的外部表,该外部数据源是使用以下方法创建的:

CREATE EXTERNAL DATA SOURCE [MyExternalDataSource] WITH
(
    TYPE = RDBMS,
    LOCATION = 'SqlServerName',
    DATABASE_NAME = 'SqlServerDatabaseName',
    CREDENTIAL = cred
);
但是,此类数据源使用的RDBMS类型似乎仅受SQL Azure支持,而不受本地SQL Server支持。针对前者运行此脚本可以正常工作,而后者会引发以下错误:

“RDBMS”附近的语法不正确

因此,这意味着解决方案中的数据库项目不能同时用于Azure SQL和本地SQL Server安装

作为解决办法,我正在考虑以下选项,尽管每个选项都有其缺点:

在解决方案中有多个数据库项目,其中一个以SQL Azure为目标,另一个以SQL Server为目标-尽管这意味着要将任何数据库更新复制到这两个项目中

从使用外部表改为使用Azure提供的数据同步功能,并在两个数据库中复制表和数据,从而消除使用导致问题的外部数据源的需要-尽管在这种特定情况下,这至少有5分钟的延迟是可以接受的,但肯定不是每个人都可以接受


其他开发人员是如何处理这种情况的?在这种情况下,您的项目需要使用SQL Azure的特定功能,但您也需要能够运行数据库的本地副本进行开发?

您可以尝试创建3个项目: 1.项目仅包含定义为视图的Azure特定引用。 2.项目仅包含定义为视图的SQL Server特定引用。视图的结构应该相同。 3.你的主要项目。在本项目中,您将引用以前的一个项目作为复合项目引用。

这里概述了几种方法:

在尝试了所有选项之后,对我有效的一个是使用构建事件

使用此方法,我将项目设置为使用一个空脚本作为部署前脚本,然后在构建本地调试和Azure发布之前,用正确的脚本替换它。构建后,占位符脚本将复制回其上,以避免更改的文件提交到源代码管理

以下是文件夹结构:

在项目文件中,我添加了以下预构建和后构建目标:

Azure预部署脚本在单独的脚本中创建外部数据源,此处未显示该脚本和外部表:

如果不存在,请从sys.tables中选择*,其中NAME='MyExternalTable',is_external=1 开始 打印“创建外部表:MyExternalTable” 创建外部表[MySchema]。[MyExternalTable] [Id][int],, [Name][nvarchar]3000不为空 具有 数据源=[ExternalDataSourceName] ; 打印“创建的外部表:MyExternalTable” 终止 其他的 开始 打印“已创建外部表MyExternalTable” 终止 去 而内部部署只是创建了一些同义词:

如果不存在,请从sys.synonyms中选择*,其中name='MyExternalTable' 开始 为[OtherDb].[OtherSchema].[OtherTable]创建同义词[MySchema].[MyExternalTable] 终止 然后,视图可以无缝地使用它,而不必知道它们是使用外部数据源从外部表获取数据,还是引用同一服务器上另一个数据库的同义词:

创建视图[dbo].[MyView]作为从[Myschema].[MyTable]中选择* 虽然它感觉有点笨重,但它似乎工作得相当好,允许使用单个数据库项目部署到Azure和本地SQL Server