[英]Reduce number of database calls
我有一个stored-procedure
,该stored-procedure
接受五个参数并在表上执行更新
Update Table
Set field = @Field
Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4
从用户的角度来看,您可以为所有条件参数选择多个值。 例如,您可以选择2个需要匹配数据库表中Col1的选项(需要以@ Para1的形式传递)
因此,我将所有选择的值存储在单独的列表中。
目前,我正在使用foreach循环进行更新
foreach (var g in _list1)
{
foreach (var o in _list2)
{
foreach (var l in _list3)
{
foreach (var a in _list4)
{
UpdateData(g, o, l,a);
}
}
}
}
我肯定这不是一个好方法,因为这将调用数据库调用的号码。 有什么方法可以忽略循环并执行最少数量的db调用来达到相同的结果?
更新
我正在寻找Table-Valued Parameters
以外的其他方法
一种可能的方法是使用表值参数将每个条件的多个值传递给存储过程。 这将减少代码中的循环,并且仍应提供所需的功能。
如果我没有记错的话,它们是在SQL Server 2008中引入的,所以只要您不必支持2005或更早版本,它们就可以使用。
考虑将Enterprise Library中的MS Data Access Application Block用于UpdateDataSet命令。
本质上,您将构建一个数据表,其中每一行都是一个参数集,然后针对打开的连接执行参数集的“批处理”。
当然,您可以通过构建一个包含多个更新命令的字符串并针对数据库执行该操作而无需执行此操作。
您可以将查询带入此表单:
Update Table Set field = @Field Where col1 IN {} and Col2 IN {} and Col3 IN {} and col4 IN {}
并以这种方式传递参数: https : //stackoverflow.com/a/337792/580053
只要您可以自由更新存储过程的结构; 我建议的方法是使用表值参数而不是多个参数。
可以在以下位置找到服务器和数据库代码的一个很好的示例: http : //www.codeproject.com/Articles/39161/C-and-Table-Value-Parameters
为什么要为此使用存储过程? 我认为您不应该使用SP来执行简单的CRUD操作。 存储过程的真正功能是进行繁重的计算等。
表值参数是我的选择,但是既然您正在寻找其他方法,为什么不采用更简单的方法,而只是在服务器端代码上动态构建批量/批量更新查询并针对数据库运行它?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.