Como juntar dois bancos de dados em um só?

23/03/2015

0

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
Marcelo Neiva

Marcelo Neiva

Responder

Posts

23/03/2015

Fabiano Carvalho

É somente UMA TABELA, ou todas as tabelas?
Se for uma unica tabela basta utilizar LEFT JOIN.
Responder

23/03/2015

Thiago Santana

Marcelo, seria apenas uma consulta nos 2 bancos ou você deseja efetuar a junção de dados em um único?
Responder

23/03/2015

Marcelo Neiva

Várias tabelas, cerca de 70% delas
Responder

23/03/2015

Marcelo Neiva

Efetuar a junção de dados em um único, que pode ser no BD1 por exemplo.
Responder

23/03/2015

Marcos P

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 :

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.
Responder

23/03/2015

Marcos P

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
                                  : 
Responder

23/03/2015

Marcos P

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
                                  : 
Responder

23/03/2015

Marcos P

E aí Marcelo, resolveu ?

Precisa de ajuda com as queries ?
Responder

01/06/2015

Marcelo Neiva

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.
Responder

01/06/2015

Mariana Carvalho

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.
Responder

01/06/2015

Fabiano Carvalho

Se for 2008 tente utilizar merge
Responder

01/06/2015

Mariana Carvalho

Fabiano, pode demonstrar um T-SQL mais simples que desse link?

[url]https://msdn.microsoft.com/pt-br/library/bb510625.aspx[/url]
Responder

02/06/2015

Mariana Carvalho

Não esquece Fabiano.
Responder

02/06/2015

Fabiano Carvalho

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
Responder

02/06/2015

Mariana Carvalho

Muitissimo obrigada Fabiano.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar