有没有办法让这个查询更快,并在循环外构建where子句?

J.P*_*J.P 5 c# sql sql-server

我有以下代码,(我完全了解参数化查询和SQL注入):

foreach(var item in items)
{
    string query = "select sum(convert(decimal(18,3),tbl.Price)) p, sum(convert(decimal(18,2),tbl.Sale)) s from table1 tbl " +
               $"where tbl.ID = {item .ID}";
    Execute(query);
    //Do stuff with query result
}
Run Code Online (Sandbox Code Playgroud)

问题是我有很多项目,我必须为每个项目执行查询,因为where子句将在每个步骤中完成.我想如果我能够在循环中查询我的查询,我的查询会更快.但我不知道怎么做.有没有办法做到这一点?

Ser*_*lan 7

而不是为每个项目执行查询.您可以添加group by到查询中并仅执行一次.

string query = "select tbl.ID, sum(convert(decimal(18,3),tbl.Price)) p, sum(convert(decimal(18,2),tbl.Sale)) s from table1 tbl group by tbl.ID ";
var result = Execute(query);

foreach(var item in items)
{
    var row = result.Select(r => r.ID == item.ID).FirstOrDefault();
    //Do stuff with query result
}
Run Code Online (Sandbox Code Playgroud)

  • 除非`items`是`table1`中记录的一小部分 - 在这种情况下,您的查询将选择许多不可用的数据.+1无论如何. (2认同)