sql >> Base de Datos >  >> RDS >> Sqlserver

¿Alguna forma de insertar o actualizar SQLBulkCopy si existe?

Publiqué un paquete nuget (SqlBulkTools) para resolver este problema.

Aquí hay un ejemplo de código que lograría una inserción masiva.

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 tablas muy grandes, hay opciones para agregar bloqueos de tabla y deshabilitar temporalmente los índices no agrupados. Consulte la documentación de SqlBulkTools para obtener más ejemplos.