Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Un modo per inserire o aggiornare SQLBulkCopy se esiste?

Ho pubblicato un pacchetto nuget (SqlBulkTools) per risolvere questo problema.

Ecco un esempio di codice che otterrebbe un upsert in blocco.

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

Per le tabelle molto grandi, sono disponibili opzioni per aggiungere blocchi di tabella e disabilitare temporaneamente gli indici non cluster. Vedere la documentazione di SqlBulkTools per ulteriori esempi.