At Mitch aponta as funções de cópia em massa (
SqlBulkCopy
, bcp
e BULK INSERT
) lida apenas com inserções, não com atualizações. A abordagem normal para o seu problema é realizar o carregamento em massa em duas (ou mais) etapas - primeiro você usa inserções em massa para carregar seus dados em uma tabela de teste e, em seguida, usa uma consulta para inserir/atualizar registros nas tabelas principais com base em os dados nas tabelas de preparo, por exemplo:
INSERT INTO MyTable
(Column1, Column2, [etc...])
SELECT Column1, Column2, [etc...]
FROM Test_Staging
WHERE [Some condition]
Consulte SQL SERVER – Inserir dados de uma tabela para outra tabela para obter informações sobre como inserir em uma tabela a partir de outra tabela - também é possível fazer um join em um UPDATE, mas estou lutando para encontrar um bom recurso sobre isso.