Поделиться через


Приступая к работе с межбазовыми запросами (вертикальное секционирование) (предварительная версия)

Применимо к: База данных SQL Azure

Запрос (предварительная версия) к эластичной базе данных для Базы данных Azure SQL позволяет выполнять запросы T-SQL, охватывающие несколько баз данных, с помощью одной точки подключения. Эта статья относится к вертикально секционированным базам данных. В этой статье описано, как настроить и использовать базу данных SQL Azure для выполнения запросов, охватывающих несколько связанных баз данных.

Дополнительные сведения о функции запроса эластичной базы данных см. в обзоре эластичных запросов базы данных SQL Azure (предварительная версия).

Необходимые компоненты

Требуется разрешение 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. Откройте SQL Server Management Studio или SQL Server Data Tools в Visual Studio.

  2. Подключитесь к базе данных «Заказы» и выполните следующие команды 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 (ранееAzure Active Directory) с эластичными запросами в настоящее время не поддерживается.

Внешние источники данных

Чтобы создать внешний источник данных, выполните следующую команду в базе данных Orders для подключения к базе данных Customers. Укажите логический сервер базы данных SQL Azure Customers в LOCATION.

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '<server_name>.database.windows.net',
    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 для выполнения инструкции Transact-SQL в одной удаленной базе данных SQL Azure или наборе баз данных, которые служат сегментами в горизонтальной схеме секционирования. Следующий удаленный запрос 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;

Себестоимость

В настоящее время функция запроса к эластичной базе данных включена в стоимость Базы данных SQL Azure.

Сведения о ценах см. на странице с ценами на Базу данных SQL.