在生产应用程序中使用SqlBulkInsert

bulkinsert c# database sql sqlbulkcopy

我们目前正在开发一个应用程序,它为每个用户会话在特定表中生成超过5-10,000行数据。目前我们使用sql text命令一次插入每行数据,因此保存操作可能需要一分钟。我们正在使用SqlBulkInserts并且已经看到时间减少到不到500ms。有没有人对在许多用户将使用该系统的生产应用程序中使用SqlBulkInserts有任何异议?

一般承认的答案

我从未遇到过使用tableLock选项设置SqlBulkCopy的问题,而另一个用户因此被阻止。 TableLock选项可以提高插件的效率,使其与许多人谈论过,并且只是简单地使用它已经向我展示了。

我的典型方法:

public void Bulk(String connectionString, DataTable data, String destinationTable)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlBulkCopy bulkCopy =
            new SqlBulkCopy
            (
            connection,
            SqlBulkCopyOptions.TableLock |
            SqlBulkCopyOptions.FireTriggers |
            SqlBulkCopyOptions.UseInternalTransaction,
            null
            ))
        {
            bulkCopy.BatchSize = data.Rows.Count;
            bulkCopy.DestinationTableName = String.Format("[{0}]", destinationTable);
            connection.Open();
            bulkCopy.WriteToServer(data);
        }
    }
}

热门答案

在使用SqlBulkInsert实现之前,请尝试动态创建INSERT查询,如下所示:

insert into MyTable (Column1, Column2)
select 123, 'abc'
union all
select 124, 'def'
union all
select 125, 'yyy'
union all
select 126, 'zzz'

这将只是一个数据库调用,它应该运行得更快。对于SQL字符串连接,请确保使用StringBuilder类。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因