Mesclando dois bancos de dados do SQL Server

1

Gostaria de importar dados de um banco de dados do SQL Server para outro. Os dois bancos de dados têm as mesmas definições de tabela, etc., mas dados diferentes. As chaves primárias são auto-incrementadas, portanto, a mesma chave primária se referirá a dados diferentes nos dois bancos de dados.

Eu precisaria das chaves primárias do segundo DB atualizado (e, obviamente, de quaisquer chaves estrangeiras que as referenciem) ao inserir no primeiro. Eu não me importo se os dados estão duplicados por enquanto. Existe uma maneira de fazer isso?

    
por BlueRaja 13.07.2010 / 19:16

2 respostas

3

Você não disse qual versão. Já que estamos falando do SQL Server, existem várias maneiras de abordar isso. Se você estiver no SQL Server 2005/2008, a maneira mais fácil é provavelmente usar a função Importar Dados no SQL Server Management Studio. Na verdade, o que isso faz é criar um pacote do SSIS que permite trazer dados para o banco de dados combinado. Essa é uma abordagem simples do pacote SSIS, portanto, as chaves estrangeiras podem ser um problema.

Se isso falhar, outra opção é usar o bcp para exportar os dados para fora da (s) tabela (s), sem as referências de chave primária / estrangeira. Isto irá colocar os dados em arquivos de texto. Nesse ponto, você poderia usar o BULK INSERT para trazer os dados para o banco de dados combinado. Há uma ressalva aqui, pois se as colunas onde as chaves estrangeiras não permitem NULLs, essa abordagem será problemática.

Uma terceira opção é escrever os scripts você mesmo, e isso é bastante fácil de fazer também. Você pode pegar o segundo banco de dados, se ainda não estiver em seu SQL Server, e anexá-lo ao SQL Server onde o banco de dados combinado será. Uma conexão de servidor vinculado também pode funcionar, mas será muito mais lenta no geral. Em seguida, você pode gravar suas instruções INSERT de acordo, deixando os campos da chave primária. Para tabelas com referências de chave estrangeira, você pode usar JOINs para obter os valores corretos para as referências, contanto que você carregue as tabelas na ordem correta.

Uma quarta opção é criar um pacote personalizado do SSIS e carregar as tabelas em ordem, e fazer as pesquisas de acordo para garantir que você tenha os valores de referência de chave estrangeira corretos. Isso é um pouco mais complicado do que o primeiro passo, mas vai garantir que você acerte. Além disso, se você tiver que repetir este exercício, você já terá o pacote. Outra vantagem é que ele não exige que você crie uma conexão de servidor vinculado e usará os métodos de inserção mais rápidos possíveis no banco de dados combinado.

    
por 13.07.2010 / 21:33
0

OK, uma vez que você tem o que parece ser principalmente dados não contíguos (e não importa se você tem alguma duplicação), há uma solução alternativa que eu usei no Postgres que pode ser aplicável :

  1. Despeje os dados como comandos SQL
    (Uma série de INSERT declarações ou algo mais semelhante a texto e amigável para editar)
  2. Editar o despejo e remover as chaves primárias
    (Um editor que entende expressões regulares pode ser útil aqui, mas não estritamente necessário, desde que possa repetir uma ação para cada linha em um arquivo)
  3. Carrega o despejo no banco de dados do SQL Server
    (Se as chaves forem auto-incrementadas e preenchidas automaticamente como uma chave SERIAL no Postgres, você deve obter novas chaves para cada linha)

Tudo isso se baseia em ser uma maneira fácil de descarregar seus dados nesse formato (ou escrever um script PHP / ASP / qualquer script para gerar o SQL também pode funcionar ...). Note também que esta técnica é um pouco difícil de lidar com grandes conjuntos de dados - O fator limitante é geralmente o editor de texto engasgado em um arquivo enorme.

    
por 13.07.2010 / 20:18