Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt es eine Möglichkeit, SQLBulkCopy einzufügen oder zu aktualisieren, falls vorhanden?

Ich habe ein Nuget-Paket (SqlBulkTools) veröffentlicht, um dieses Problem zu lösen.

Hier ist ein Codebeispiel, das eine Massen-Upsert erreichen würde.

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 sehr große Tabellen gibt es Optionen zum Hinzufügen von Tabellensperren und zum vorübergehenden Deaktivieren von nicht gruppierten Indizes. Weitere Beispiele finden Sie in der SqlBulkTools-Dokumentation.