Использование «SELECT INTO» с Azure SQL для копирования данных из другой БД
Я пытаюсь автоматизировать инициализацию базы данных SQL в Azure. Для некоторых (справочных) таблиц данные должны копироваться из исходной БД в новую БД при каждой их инициализации.
Для этого я выполняю запрос, содержащий
SELECT * INTO [target_db_name]..[my_table_name] FROM [source_db_name].dbo.[my_table_name]
На данный момент исключение говорит мне, что
Ссылка на базу данных и / или имя сервера в «source_db_name.dbo.my_table_name» не поддерживается в этой версии SQL Server.
Изучив это, я обнаружил, что теперь можно ссылаться на другую базу данных SQL Azure, если она настроена как внешний источник данных. [Вот а такжеВот]
Итак, в моей целевой БД я выполнил следующее утверждение:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL cred
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE [source_db_name]
WITH
(
TYPE=RDBMS,
LOCATION='my_location.database.windows.net',
DATABASE_NAME='source_db_name',
CREDENTIAL= cred
);
CREATE EXTERNAL TABLE [dbo].[my_table_name](
[my_column_name] BIGINT NOT NULL
)
WITH
(
DATA_SOURCE = [source_db_name],
SCHEMA_NAME = 'dbo',
OBJECT_NAME = 'my_table_name'
)
НоSELECT INTO
заявление все еще дает то же исключение.
Кроме того, простойSELECT * FROM [source_db_name].[my_table_name]
выдает исключение «Неверное имя объекта« имя_источника_имя_имя_таблицы »».
Чего мне не хватает?
ОБНОВИТЬ
Я нашел проблему:CREATE EXTERNAL TABLE
создаетчто кажется таблица в целевой БД. Чтобы запросить это, имя исходной БД не должно использоваться. Итак, где я терпел неудачу с:
SELECT * FROM [source_db_name].[my_table_name]
Я вижу, что я действительно должен запрашивать
SELECT * FROM [my_table_name]