Existem duas tabelas em dois bancos de dados diferentes em servidores diferentes, preciso juntá-las para fazer poucas consultas. Que opções eu tenho? O que devo fazer?
102
Existem duas tabelas em dois bancos de dados diferentes em servidores diferentes, preciso juntá-las para fazer poucas consultas. Que opções eu tenho? O que devo fazer?
Respostas:
Você precisará usar
sp_addlinkedserver
para criar um link de servidor. Consulte a documentação de referência para uso. Assim que o link do servidor for estabelecido, você construirá a consulta normalmente, apenas prefixando o nome do banco de dados com o outro servidor. IE:Depois que o link for estabelecido, você também pode usar
OPENQUERY
para executar uma instrução SQL no servidor remoto e transferir apenas os dados de volta para você. Isso pode ser um pouco mais rápido e permitirá que o servidor remoto otimize sua consulta. Se você armazenar os dados em cache em uma tabela temporária (ou na memória)DB1
no exemplo acima, será capaz de consultá-los da mesma forma que ingressar em uma tabela padrão. Por exemplo:Verifique a documentação do OPENQUERY para ver mais alguns exemplos. O exemplo acima é muito artificial. Eu definitivamente usaria o primeiro método neste exemplo específico, mas a segunda opção
OPENQUERY
pode economizar algum tempo e desempenho se você usar a consulta para filtrar alguns dados.fonte
Experimente isto:
fonte
Se um servidor vinculado não for permitido por seu dba, você pode usar OPENROWSET. O Books Online fornecerá a sintaxe necessária.
fonte
De uma perspectiva empresarial prática, a melhor prática é fazer uma cópia espelhada da tabela do banco de dados em seu banco de dados e, em seguida, apenas ter uma tarefa / proc atualizá-la com delta's a cada hora.
fonte
Uma junção de duas tabelas é melhor feita por um SGBD, portanto, deve ser feito dessa forma. Você pode espelhar a tabela menor ou subconjunto dela em um dos bancos de dados e, em seguida, juntá-los. Alguém pode ficar tentado a fazer isso em um servidor ETL como a Informatica, mas acho que não é aconselhável se as tabelas forem enormes.
fonte
Se a opção de link de banco de dados não estiver disponível, outro caminho que você pode seguir é vincular as tabelas via ODBC a algo como o MS Access ou Crystal reports e fazer a junção lá.
fonte
Talvez nomes de banco de dados embutidos em código não sejam a melhor abordagem sempre em uma consulta SQL. Portanto, adicionar sinônimos seria uma abordagem melhor. Nem sempre é o caso de bancos de dados terem o mesmo nome em vários ambientes de teste. Eles podem consistir em postfixes como PROD, UAT, SIT, QA e assim por diante. Portanto, esteja ciente das consultas embutidas em código e torne-as mais dinâmicas.
Abordagem nº 1: use sinônimos para vincular tabelas entre bancos de dados no mesmo servidor.
Abordagem nº 2: Colete dados separadamente de cada banco de dados e junte-os ao seu código. Suas strings de conexão de banco de dados podem fazer parte da configuração do servidor de aplicativos por meio de um banco de dados ou de um arquivo de configuração.
fonte
Eu tentei este código abaixo e está funcionando bem
fonte
Você pode tentar o seguinte:
fonte
para isso basta seguir a consulta abaixo
Onde escrevi databasename, você deve definir o nome do banco de dados. Se você estiver no mesmo banco de dados, não precisa definir o nome do banco de dados, mas se estiver em outro banco de dados, você deve mencionar o nome do banco de dados como caminho ou ele mostrará o erro. Espero ter facilitado o seu trabalho
fonte
Enquanto estava tendo problemas para unir essas duas tabelas, consegui fazer exatamente o que queria abrindo os dois bancos de dados remotos ao mesmo tempo. MySQL 5.6 (php 7.1) e o outro MySQL 5.1 (php 5.6)
Se você receber esses dois OKs na tela, os dois bancos de dados estarão abertos e prontos. Então você pode prosseguir para fazer suas perguntas.
Eu estava tentando fazer algumas junções, mas como abri esses dois bancos de dados, posso ir e voltar fazendo consultas apenas alterando a conexão
$mysqli1
ou$mysqli2
Funcionou para mim, espero que ajude ... Saúde
fonte