Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Alguma maneira de inserir ou atualizar SQLBulkCopy, se existir?


Publiquei um pacote nuget (SqlBulkTools) para resolver esse problema.

Aqui está um exemplo de código que alcançaria um upsert em massa.
var bulk = new BulkOperations();
var books = GetBooks();

using (TransactionScope trans = new TransactionScope())
{
    using (SqlConnection conn = new SqlConnection(ConfigurationManager
    .ConnectionStrings["SqlBulkToolsTest"].ConnectionString))
    {
        bulk.Setup<Book>()
            .ForCollection(books)
            .WithTable("Books")
            .AddAllColumns()
            .BulkInsertOrUpdate()
            .MatchTargetOn(x => x.ISBN)
            .Commit(conn);
    }

    trans.Complete();
}

Para tabelas muito grandes, há opções para adicionar bloqueios de tabela e desabilitar temporariamente índices não clusterizados. Consulte a documentação do SqlBulkTools para obter mais exemplos.