跨数据库查询(纵向分区)入门(预览)

适用于:Azure SQL 数据库

Azure SQL 数据库弹性数据库查询(预览版)可让你使用单一连接点运行跨多个数据库的 T-SQL 查询。 本文适用于垂直分区数据库。 本文说明了如何配置和使用 Azure SQL 数据库执行跨多个相关数据库的查询。

有关弹性数据库查询功能的详细信息,请参阅 Azure SQL 数据库弹性数据库查询概述(预览版)

先决条件

需要 ALTER ANY EXTERNAL DATA SOURCE 权限。 此权限包含在 ALTER DATABASE 权限中。 引用基础数据源需要 ALTER ANY EXTERNAL DATA SOURCE 权限。

创建示例数据库

首先,我们在相同或不同逻辑服务器中创建两个数据库 CustomersOrders

Orders 数据库中执行以下查询以创建 OrderInformation 表并输入示例数据。

CREATE TABLE [dbo].[OrderInformation](
    [OrderID] [int] NOT NULL,
    [CustomerID] [int] NOT NULL
    )
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (123, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (149, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (857, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (321, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (564, 8)

现在,在 Customers 数据库中执行以下查询以创建 CustomerInformation 表并输入示例数据。

CREATE TABLE [dbo].[CustomerInformation](
    [CustomerID] [int] NOT NULL,
    [CustomerName] [varchar](50) NULL,
    [Company] [varchar](50) NULL
    CONSTRAINT [CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
)
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (1, 'Jack', 'ABC')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (2, 'Steve', 'XYZ')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (3, 'Lylla', 'MNO')

创建数据库对象

数据库范围的主密钥和凭据

  1. 在 Visual Studio 中打开 SQL Server Management Studio 或 SQL Server Data Tools。

  2. 连接到 Orders 数据库,并执行以下 T-SQL 命令:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master_key_password>';
    CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
    WITH IDENTITY = '<username>',
    SECRET = '<password>';  
    
    • master_key_password 是你选择用于加密连接凭据的强密码。
    • usernamepassword 应是用于登录到 Customers 数据库的用户名和密码(如果不存在用户,在 Customers 数据库中创建一个新用户)。
    • 当前不支持使用 Microsoft Entra ID(旧称 Azure Active Directory)通过弹性查询进行身份验证。

外部数据源

若要创建外部数据源,请对 Orders 数据库执行以下命令以连接到 Customers 数据库。 在 LOCATION 中提供 Customers 数据库的 Azure SQL 逻辑服务器。

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '<server_name>.database.chinacloudapi.cn',
    DATABASE_NAME = 'Customers',
    CREDENTIAL = ElasticDBQueryCred
);

外部表

Orders 数据库中创建外部表,该表应与 CustomerInformation 表的定义相匹配:

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
    [CustomerName] [varchar](50) NOT NULL,
    [Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)

远程查询

使用 sp_execute _remote存储过程,在单个远程 Azure SQL 数据库或在水平分区方案中用作分片的一组数据库中执行 Transact-SQL 语句。 以下远程 T-SQL 查询从外部 OrderInformation 表返回数据。

EXEC sp_execute_remote
    N'MyElasticDBQueryDataSrc',
    N'SELECT COUNT(CustomerID) AS customer_count FROM CustomerInformation';

执行示例弹性数据库 T-SQL 查询

定义外部数据源和外部表后,现在可以使用 T-SQL 查询外部表。 对 Orders 数据库执行以下查询:

SELECT OrderInformation.CustomerID, OrderInformation.OrderId, CustomerInformation.CustomerName, CustomerInformation.Company
FROM OrderInformation
INNER JOIN CustomerInformation
ON CustomerInformation.CustomerID = OrderInformation.CustomerID;

成本

目前,弹性数据库查询功能包含在 Azure SQL 数据库的成本中。

有关定价信息,请参阅 SQL 数据库定价