sql >> Databasteknik >  >> RDS >> Sqlserver

Något sätt att SQLBulkCopy infoga eller uppdatera om det finns?

Jag publicerade ett nuget-paket (SqlBulkTools) för att lösa detta problem.

Här är ett kodexempel som skulle uppnå en bulk-upsert.

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

För mycket stora tabeller finns det alternativ att lägga till tabelllås och tillfälligt inaktivera icke-klustrade index. Se SqlBulkTools-dokumentationen för fler exempel.



  1. Ta med ditt eget moln tillgängligt för DigitalOcean

  2. PostgreSQL CSV-import från kommandoraden

  3. Hur man returnerar oracle-utgångsparametrar från en lagrad procedur i .NET

  4. PostgreSQL strömmande replikering vs logisk replikering