来自DataTable的SQL CLR SqlBulkCopy

clr sql sqlbulkcopy sqlclr sql-server

我们在CLR过程中有一个内存DataTable。在进行大量处理之后,DataTable需要将大量数据加载到数据库中的表中。不幸的是,由于我们使用的是上下文连接,因此 SqlBulkCopy不起作用(抛出错误: 请求的操作在上下文连接 的上下文限制大纲中 不可用 )。

我们正在考虑建立一个额外的常规连接并使用它来执行SQLBulkCopy。考虑到在上下文连接上使用常规连接的开销,这似乎相当愚蠢。我们已经考虑过对DataTable中的行进行迭代并为每个行插入一条记录,但它的大小非常大,而且SQLBulkCopy看起来更合适。

我们没有与DataTable结合,只是在寻找从CLR过程将大量数据插入数据库的最佳方法。关于DataTable的最后一点,它代表了一个底层数据库表,但没有通过DataSet或TableAdapter绑定到表。在CLR程序中这样做的方法并不是很明显。这样做并使用AcceptChanges或Update方法是一种可接受的解决方案。

一般承认的答案

根据表的大小,我估计SQLBulkCopy的速度比插入快10-100倍,因此权衡取舍非常值得。

看你正在对你的DataTable进行'重要处理',这无疑需要时间和资源,使用完整连接而不是上下文连接或打开一个全新连接的额外开销很小,这是一个很小的代价。




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