我有一个对存储过程的调用,它基本上是一个INSERT存储过程。它将表A中的标识插入表A,然后插入表B中。
现在,我需要从应用程序代码中多次调用此存储过程。
有什么方法可以批量生产吗?目前它正在进行N次往返DB,我希望它是一个。
我能想到的唯一方法是通过用户定义的表格类型在整个网络中传递整个项目列表。
但是这种方法的问题在于我需要在sproc中使用CURSOR来遍历每个项目以进行插入(因为标识字段)。
基本上,我们可以使用EF 4.2批量DbCommand.ExecuteNonQuery()
吗?
或者我们可以用像Dapper这样的东西来做吗?
答案 0 :(得分:0)
您可以保持这样,并且在存储过程中只需在目标表和表参数之间执行MERGE
。由于您始终使用新记录,MERGE
将仅在INSERT
分支上输入。
在这种情况下,像这样使用MERGE
是一种不用游标进行批量插入的简单方法。
另外,另一种避免使用游标的方法是在SP中使用INSERT from SELECT
语句。