Usando "SELECT INTO" com o SQL do Azure para copiar dados de outro banco de dados
Estou tentando automatizar a inicialização de um banco de dados SQL no Azure. Para algumas tabelas (pesquisa), os dados precisam ser copiados de um banco de dados de origem para o novo banco de dados cada vez que são inicializados.
Para fazer isso, eu executo uma consulta contendo
SELECT * INTO [target_db_name]..[my_table_name] FROM [source_db_name].dbo.[my_table_name]
Neste ponto, uma exceção é lançada, dizendo-me que
A referência ao banco de dados e / ou nome do servidor em 'source_db_name.dbo.my_table_name' não é suportada nesta versão do SQL Server.
Após analisar isso, descobri que agora é possível fazer referência a outro banco de dados SQL do Azure, desde que ele tenha sido configurado como uma fonte de dados externa. [aqui eaqui]
Então, no meu banco de dados de destino, eu executei a seguinte instrução:
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'
)
Mas oSELECT INTO
A instrução ainda gera a mesma exceção.
Além disso, um simplesSELECT * FROM [source_db_name].[my_table_name]
gera a exceção "Nome de objeto inválido 'source_db_name.my_table_name'".
o que estou perdendo?
ATUALIZAR
Eu encontrei o problema:CREATE EXTERNAL TABLE
criao que parece ser uma tabela no banco de dados de destino. Para consultar isso, o nome do banco de dados de origem não deve ser usado. Então, onde eu estava falhando com:
SELECT * FROM [source_db_name].[my_table_name]
Eu vejo que eu realmente deveria estar consultando
SELECT * FROM [my_table_name]