Array
(
)

Como juntar dois bancos de dados em um só?

Marcelo Neiva
   - 23 mar 2015

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

Faabiianooc
   - 23 mar 2015

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

Thiago Santana
   - 23 mar 2015

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

Marcelo Neiva
   - 23 mar 2015

Várias tabelas, cerca de 70% delas

Marcelo Neiva
   - 23 mar 2015

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

Marcos P
   - 23 mar 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 :

#Código

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

#Código
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.

Marcos P
   - 23 mar 2015

Em tempo, corrigindo o segundo exemplo :

#Código

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
                                  : 

Marcos P
   - 23 mar 2015

Você pode, ainda, guardar ( como uma coluna normal ) a chave da origem na nova tabela ( para uso futuro ) :

#Código

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
                                  : 

Marcos P
   - 23 mar 2015

E aí Marcelo, resolveu ?

Precisa de ajuda com as queries ?

Marcelo Neiva
   - 01 jun 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.

Mariana Carvalho
   - 01 jun 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.

Faabiianooc
   - 01 jun 2015

Se for 2008 tente utilizar merge

Mariana Carvalho
   - 01 jun 2015

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

https://msdn.microsoft.com/pt-br/library/bb510625.aspx

Mariana Carvalho
   - 02 jun 2015

Não esquece Fabiano.

Faabiianooc
   - 02 jun 2015

Veja se fica compreensivel.

#Código

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

Mariana Carvalho
   - 02 jun 2015

Muitissimo obrigada Fabiano.