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

适用于:Azure SQL 数据库

Azure SQL 数据库弹性数据库查询(预览版)可让你使用单一连接点运行跨多个数据库的 T-SQL 查询。 本文适用于垂直分区数据库

完成时,会:了解如何配置和使用 Azure SQL 数据库执行跨多个相关数据库的查询。

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

先决条件

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

创建示例数据库

首先,我们在相同或不同服务器中创建两个数据库:Customers 和 Orders 。

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”是你选择用于加密连接凭据的强密码。 “username”和“password”应是用于登录到 Customers 数据库的用户名和密码(如果不存在用户,在 Customers 数据库中创建一个新用户)。 当前不支持使用 Microsoft Entra ID(旧称 Azure Active Directory)通过弹性查询进行身份验证。

外部数据源

若要创建外部数据源,请对 Orders 数据库执行以下命令:

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)

执行示例弹性数据库 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 数据库定价

后续步骤