我们目前正在开发一个应用程序,在每个用户会话的特定表中生成超过5-10,000行数据。目前我们使用sql text命令一次插入每行数据,因此保存操作可能需要一分钟。我们正在使用SqlBulkInserts并且已经看到时间下降到不到500ms。有没有人反对在生产应用程序中使用SqlBulkInserts,许多用户将使用该系统?
答案 0 :(得分:6)
我从未遇到过使用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);
}
}
}
答案 1 :(得分:2)
在使用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
类。
答案 2 :(得分:1)
如果您的应用程序确实需要在每个会话中生成那么多记录,我认为这是正确的方法。