减少数据库调用次数

我有一个stored-procedure ,它接受五个参数并在一个表上执行更新

Update Table
Set field = @Field
Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4

从用户的预期中,您可以为所有条件参数选择多个值。 例如,您可以选择需要与数据库表中的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);
                        }
                    }
                }
            }

我相信这不是一个很好的做法,因为这会调用数据库调用的次数。 有没有什么办法可以忽略循环,并做最少数量的数据库调用来实现相同的结果?

更新

我正在寻找其他方法比Table-Valued Parameters


您可以将查询带入此表单:

Update Table Set field = @Field Where col1 IN {} and Col2 IN {} and Col3 IN {} and col4 IN {}

并通过这种方式传递参数:https://stackoverflow.com/a/337792/580053


一种可能的方法是使用Table-Valued Parameters将每个条件的多个值传递给存储过程。 这将减少代码中的循环,并应该仍然提供您正在寻找的功能。

如果我没有弄错,他们是在SQL Server 2008中引入的,所以只要你不需要支持2005或更早的版本,他们应该可以使用。


考虑将UpdateDataSet命令用于企业库中的MS数据访问应用程序块。

实际上,您将构建一个数据表,其中每行都是一个参数集,然后对打开的连接执行“批处理”参数集。

当然,你也可以这样做,通过构建一个在其中包含多个更新命令并在数据库中执行它的字符串。

链接地址: http://www.djcxy.com/p/94679.html

上一篇: Reduce number of database calls

下一篇: SQL update inserted row with trigger