我正在开发一个项目,该项目旨在使用 Azure 数据库在 azure 平台上运行,并在本地使用本地 sql 服务器。我们有包含跨数据库调用的存储过程。但是它不适用于 Azure 服务器。我需要能够在 azure 和本地 sql 服务器中工作的跨数据库查询。
我们使用 Elastic Query,它允许我们跨 Azure SQL 数据库进行查询
https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-query-overview/
我们可以使用以下代码在 azure 服务器中设置外部数据源。在这种情况下,我们可以执行跨数据库调用,例如连接单个数据库中的表。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'yourPassword';
CREATE DATABASE SCOPED CREDENTIAL yourServeradminlogin
WITH IDENTITY = 'yourServeradminlogin',
SECRET = 'yourPassword';
CREATE EXTERNAL DATA SOURCE RefmyDemoDB2
WITH
(
TYPE=RDBMS,
LOCATION='testdbdemoserver.database.windows.net',
DATABASE_NAME='myDemoDB2',
CREDENTIAL= yourServeradminlogin
);
CREATE EXTERNAL TABLE [dbo].[Department](
[DeptId] [int] NOT NULL,
[Name] [varchar](50) NULL
)
WITH
(
DATA_SOURCE = RefmyDemoDB2
);
如果不添加第三方数据库引擎,似乎无法在我们的本地 SQL 服务器上使用上述方法。在本地 sql server 2017 及更高版本中安装一个名为 PolyBase 的东西来进行跨数据库查询。它仅支持 HADOOP 等外部数据源类型,而不是在 sql server 中引用另一个数据库(或任何数据存储)。
我们可以使用以下代码来完成
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyP@ssword123secretword';
CREATE DATABASE SCOPED CREDENTIAL mycredential
WITH IDENTITY = 'credential', Secret = 'secretkey'
CREATE EXTERNAL DATA SOURCE mycustomers
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://azurestorage.blob.core.windows.net/',
CREDENTIAL = mycredential
);
CREATE EXTERNAL FILE FORMAT csvformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = ','
)
);
CREATE EXTERNAL TABLE TableName
(
[did] [int] NOT NULL,
[Dname] [varchar] (50) NULL
)
WITH
(
LOCATION = '/',
DATA_SOURCE = mycustomers,
FILE_FORMAT = csvformat
)
使用 HADOOP 和 polybase,我们可以在本地 sql server 中创建外部数据源。但它创建了该外部数据存储的外部数据源。即位于该外部存储中的外部数据表。确切地说,我的要求是在 sql server 中创建数据库的外部数据源。这样我就可以在 azure 和本地 sql server 中使用相同的 corss 数据库查询
有没有办法解决这个问题。或者在 azure 和本地 sql server 中运行跨数据库查询的任何解决方案?