Como juntar dois bancos de dados em um só?
Olá.
Tenho dois Bancos de dados com a mesma estrutura. BD1 e BD2
Preciso passar todos os dados do BD2 para o BD1
Porém, existem dados iguais(com mesmo ID) do BD2 que contém no BD1
Alguém sabe como fazer?
(acredito que seria como se fosse uma replicação entre bancos)
Obs: Utilizo o SQL 2012 Enterprise
Tenho dois Bancos de dados com a mesma estrutura. BD1 e BD2
Preciso passar todos os dados do BD2 para o BD1
Porém, existem dados iguais(com mesmo ID) do BD2 que contém no BD1
Alguém sabe como fazer?
(acredito que seria como se fosse uma replicação entre bancos)
Obs: Utilizo o SQL 2012 Enterprise
Marcelo Neiva
Curtidas 0
Respostas
Fabiano Carvalho
23/03/2015
É somente UMA TABELA, ou todas as tabelas?
Se for uma unica tabela basta utilizar LEFT JOIN.
Se for uma unica tabela basta utilizar LEFT JOIN.
GOSTEI 0
Thiago Santana
23/03/2015
Marcelo, seria apenas uma consulta nos 2 bancos ou você deseja efetuar a junção de dados em um único?
GOSTEI 0
Marcelo Neiva
23/03/2015
Várias tabelas, cerca de 70% delas
GOSTEI 0
Marcelo Neiva
23/03/2015
Efetuar a junção de dados em um único, que pode ser no BD1 por exemplo.
GOSTEI 0
Marcos P
23/03/2015
Acredito que você tenha de fazer isso tabela-a-tabela...
Como existem chaves primárias que se repetem nos dois bancos, você terá de criar uma terceira tabela de destino e fazer o JOIN das duas no momento do insert.
Serão geradas novas chaves primárias... se isso for um problema, terá de ser criada uma nova coluna que irá compor a chave primária da nova tabela, apenas "desempatando" pela origem dos dados.
Algo como :
ou
Existe, também, a possibilidade de derrubar toda arquitetura de chaves-primárias, mas imagino que isso seja um transtorno muito grande do lado da aplicação.
Como existem chaves primárias que se repetem nos dois bancos, você terá de criar uma terceira tabela de destino e fazer o JOIN das duas no momento do insert.
Serão geradas novas chaves primárias... se isso for um problema, terá de ser criada uma nova coluna que irá compor a chave primária da nova tabela, apenas "desempatando" pela origem dos dados.
Algo como :
Tabela.DB1 Tabela.DB2 NovaTabelaDB1 ---------------- ---------------- ---------------- ID ColunaA ID ColunaA ID ColunaA ---------------- ---------------- ---------------- 1 ABC 1 XYZ 1 ABC 2 BCD 2 XXX 2 BCD 3 FDH 3 YYY 3 FDH 4 AAA 4 ZZZ 4 AAA 5 BHU 5 WKL 5 BHU : : 6 XYZ 7 XXX 8 YYY 9 ZZZ 10 WKL :
ou
Tabela.DB1 Tabela.DB2 NovaTabelaDB1 ---------------- ---------------- ---------------- ID ColunaA ID ColunaA ID Origem ColunaA ---------------- ---------------- ---------------- 1 ABC 1 XYZ 1 DB1 ABC 2 BCD 2 XXX 2 DB1 BCD 3 FDH 3 YYY 3 DB1 FDH 4 AAA 4 ZZZ 4 DB1 AAA 5 BHU 5 WKL 5 DB1 BHU : : 1 DB2 XYZ 2 DB3 XXX 3 DB4 YYY 4 DB5 ZZZ 5 DB6 WKL :
Existe, também, a possibilidade de derrubar toda arquitetura de chaves-primárias, mas imagino que isso seja um transtorno muito grande do lado da aplicação.
GOSTEI 0
Marcos P
23/03/2015
Em tempo, corrigindo o segundo exemplo :
Tabela.DB1 Tabela.DB2 NovaTabelaDB1 ---------------- ---------------- ---------------- ID ColunaA ID ColunaA ID Origem ColunaA ---------------- ---------------- ---------------- 1 ABC 1 XYZ 1 DB1 ABC 2 BCD 2 XXX 2 DB1 BCD 3 FDH 3 YYY 3 DB1 FDH 4 AAA 4 ZZZ 4 DB1 AAA 5 BHU 5 WKL 5 DB1 BHU : : 1 DB2 XYZ 2 DB2 XXX 3 DB2 YYY 4 DB2 ZZZ 5 DB2 WKL :
GOSTEI 0
Marcos P
23/03/2015
Você pode, ainda, guardar ( como uma coluna normal ) a chave da origem na nova tabela ( para uso futuro ) :
Tabela.DB1 Tabela.DB2 NovaTabelaDB1 ---------------- ---------------- ------------------- ID ColunaA ID ColunaA ID OLD_ID Coluna ---------------- ---------------- ------------------ 1 ABC 1 XYZ 1 1 ABC 2 BCD 2 XXX 2 2 BCD 3 FDH 3 YYY 3 3 FDH 4 AAA 4 ZZZ 4 4 AAA 5 BHU 5 WKL 5 5 BHU : : 6 1 XYZ 7 2 XXX 8 3 YYY 9 4 ZZZ 10 5 WKL :
GOSTEI 0
Marcos P
23/03/2015
E aí Marcelo, resolveu ?
Precisa de ajuda com as queries ?
Precisa de ajuda com as queries ?
GOSTEI 0
Marcelo Neiva
23/03/2015
Na verdade não fiz, gostaria de um exemplo (T-SQL) mais prático para juntar os 2 BDs.
Em relação aos IDs, daria um UPDATE em cada tabela para o ID necessário, eu teira esses IDs ao criar o Usuário no sistema, não teria problema neste caso.
Marcos P, apesar de sua técnica/ideia ser boa, talvez eu poderia pensar um forma melhor, mas acredito que não resolveria o meu problema.
Valeu pela dica!
Abraços,
Marcelo.
Em relação aos IDs, daria um UPDATE em cada tabela para o ID necessário, eu teira esses IDs ao criar o Usuário no sistema, não teria problema neste caso.
Marcos P, apesar de sua técnica/ideia ser boa, talvez eu poderia pensar um forma melhor, mas acredito que não resolveria o meu problema.
Valeu pela dica!
Abraços,
Marcelo.
GOSTEI 0
Mariana Carvalho
23/03/2015
Gente me metendo aqui, fiquei curiosa com a situação, nessa situação especifica existe um t-sql ou alguma forma simples, utilizado um software extra para importação.
GOSTEI 0
Fabiano Carvalho
23/03/2015
Se for 2008 tente utilizar merge
GOSTEI 0
Mariana Carvalho
23/03/2015
Fabiano, pode demonstrar um T-SQL mais simples que desse link?
[url]https://msdn.microsoft.com/pt-br/library/bb510625.aspx[/url]
[url]https://msdn.microsoft.com/pt-br/library/bb510625.aspx[/url]
GOSTEI 0
Mariana Carvalho
23/03/2015
Não esquece Fabiano.
GOSTEI 0
Fabiano Carvalho
23/03/2015
Veja se fica compreensivel.
MERGE DESTINO AS DESTINO USING FONTE AS FONTE ON DESTINO.INDICE = FONTE.DESTINO WHEN MATCHED --Quando encontrar UPDATE SET ENCONTROU = 'SIM' --ATUALIZA A COLUNA ENCONTROU WHEN NOT MATCHED UPDATE SET ENCONTROU = 'NAO' --ATUALIZA A COLUNA NAO ENCONTROU
GOSTEI 0
Mariana Carvalho
23/03/2015
Muitissimo obrigada Fabiano.
GOSTEI 0
Alfredo
23/03/2015
Eu tenho dois bancos de dados uma eh copia da outra. Pretendo gerar o terceiro banco de dados, neste caso quero juntar os dados dos dois banco de dados. Como se faz em MySQL?
GOSTEI 0