Loading…

Azure SQL Database – Como fazer um join entre tabelas de bases diferentes?

Fala Pessoal,

Continuando a série de posts sobre o Azure SQL Database, no meu dia a dia de Consultorias é bem comum ver sistemas que utilizam mais de uma base de dados para realizar operações.

E no Azure SQL Database? Isso funciona?

Vamos testar juntos?

Criei duas bases (database01 e database02) no meu portal do azure conforme pode ser visto abaixo:

Em seguida criei uma tabela em cada uma dessas bases de dados e populei com algumas informações:

Database01:

Database02:

Após criar e popular as duas tabelas com mesmo nome, mas em bases diferentes, vamos tentar fazer um join nelas para ver o que acontece:

Vixe… Deu ruim… E agora Fabrício???

Pois é… No Azure SQL Database não temos suporte para realizar um CROSS database igual realizamos em nossas instâncias On-Premise. Só no Azure SQL Managed Instance que isso será possível.

Mas… Contudo…Entretanto…Todavia…

Conseguimos chegar perto disso com a utilização de EXTERNAL TABLES.

Para fazer isso, vamos executar TODOS os comandos abaixo na database01.

Primeiro temos que criar uma master key:

Quando criei a database02, eu também criei um login chamado dba_admin para acessar essa base.

Dito isso, vamos criar uma credencial para acessar a database02 com esse login:

O próximo passo é criar um DATA SOURCE que vamos utilizar para acessar o servidor lógico e a database02. Utilizamos a credencial do passo anterior:

Finalmente vamos criar nossa EXTERNAL TABLE:

Essa EXTERNAL TABLE é como se fosse um objeto da base database01, tanto que não conseguimos criar ela com o mesmo nome sqlfamily. Tive que colocar um sufixo “_ext” no nome para diferenciar o nome dos objetos.

Podemos conferir os objetos que criamos nas DMV’s abaixo:

Criada nossa External Table, agora conseguimos usar ela para acessar a tabela sqlfamily da database02.

Nosso JOIN fica da seguinte forma:

Agora conseguimos acessar a database02 e pegar a informação da coluna Hobby:

Essa EXTERNAL TABLE é estática Fabrício? Se eu fizer novos inserts na database02 eles vão ser retornados automaticamente?

A external table é como se fosse um Linked Server para a database02. Ou seja, novos inserts serão retornados normalmente por esse join.

Vamos inserir uma linha em cada base para conferir.

Executando o JOIN novamente, nossas linhas que foram inseridas nas duas databases já são retornadas:

 

Legal Fabrício. Eu consigo fazer um insert nessa EXTERNAL TABLE?

Resposta:

 

Não conseguimos fazer um insert. Ela é utilizada apenas para consultas.

E a performance disso Fabrício? É boa?

Excelente pergunta.

Você já deve imaginar a resposta, mas vamos deixar os detalhes para um próximo post. Aguardem!

Posts Relacionados:

Gostou da dica?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Deixe uma resposta