Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Un moyen d'insérer ou de mettre à jour SQLBulkCopy s'il existe?

J'ai publié un package nuget (SqlBulkTools) pour résoudre ce problème.

Voici un exemple de code qui permettrait d'obtenir une mise à jour en bloc.

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();
}

Pour les très grandes tables, il existe des options pour ajouter des verrous de table et désactiver temporairement les index non clusterisés. Voir la documentation SqlBulkTools pour plus d'exemples.