SQL Import para atualizar registros existentes?

4

Eu tenho uma tabela em um banco de dados que contém custos para itens que são atualizados mensalmente. Para atualizar esses custos, temos alguém para exportar a tabela, fazer alguma mágica no excel e depois importar a tabela de volta para o banco de dados. Estamos executando o MSSQL 2005 e usando o SQL Management Studio. O problema é que, ao importar de volta para a tabela, precisamos excluir todos os registros antes de importarmos, senão obteremos erros. A situação ideal seria a importação reconhecer as chaves primárias e, em seguida, atualizar os registros em vez de tentar criar um segundo registro com uma chave duplicada - interrompendo a importação. A melhor ilustração do comportamento que estamos tentando obter pode ser encontrada no link atualizar ou inserir exemplo. É algo como isto possível com as ferramentas incorporadas ou temos de obter software de terceiros para que isso aconteça?

    
por Kenundrum 11.01.2010 / 17:25

1 resposta

2

No SQL Server 2008, você poderia colocar os dados em uma nova tabela e usar a instrução MERGE com sua tabela existente como destino e sua nova tabela como sua origem.

Em vez disso, você pode preferir colocá-lo em uma nova tabela e usá-lo como sua origem com um método antigo (usando duas etapas, infelizmente):

UPDATE t SET col1 = s.col1, col2 = s.col2
FROM targetTable t
   JOIN
   newTable s
    ON s.id = t.id ;

INSERT targetTable (columnlist)
SELECT s.col1, s.col2, ...
FROM sourceTable s
   LEFT JOIN
   targetTable t
    ON s.id = t.id 
WHERE t.id IS NULL;

Lembre-se de que você pode precisar ativar IDENTITY_INSERT na sua tabela de destino, caso esteja tentando inserir em uma coluna de identidade também.

    
por 13.03.2010 / 07:04