用于存储过程的 SqlBulkCopy
本文关键字:SqlBulkCopy 存储过程 用于 | 更新日期: 2023-09-27 17:56:02
SqlBulkCopy应该有助于执行大量插入,而不是发送单个插入语句。但是调用存储过程呢?我有一个过程,将数据传递给它,然后在另一个表中执行一些查找,并可能第二次插入该查找表。
由于这不能转换为查询,有没有办法使用 SqlBulkCopy 进行存储过程调用,或者它没有任何意义?
我每次只在每个数据库连接上进行 2000 次或更少的调用,但想知道是否有更有效的方法。
根据@Kev答案,您可以将批量插入到临时表中,然后您可以让触发器启动存储过程。
我假设您对其他表有一个 FK 约束,因此您在插入目标表之前需要该值。如果可能,您可以尝试删除约束。执行批量插入,然后触发器可以更新列。
唯一可以想到这样做的方法是在目标表上有一个触发器并设置 SqlBulkCopyOptions FireTriggers
选项。
从那里可以调用存储过程或将存储过程逻辑放在该触发器中。
如果表由其他客户端(例如 Web 应用程序)追加,则需要通过某种方法来区分批量复制客户端和其他常规应用程序。我想您可以通过在连接字符串中设置应用程序名称值并使用 SELECT APP_NAME()
在触发器中检查它来区分。
如果您想在插入的每一行上运行存储的过程,那么您就违背了插入的目的,即快速插入大量记录。 我会插入到临时表中,然后修改存储的过程以使用集合逻辑一次对整个数据集进行操作。