0

我有一种情况,我正在执行一个存储过程并在我的 c# 代码中获取返回 55 条记录的结果,现在我在行中有一个列,由于执行另一个 sql 查询需要显示该列。我已经尝试了所有方法,但无法弄清楚如何实现。请帮忙。

我调用正常工作的过程的 C# 代码是:

public static MonthlyFinancialReportCollection GetList(SASTransaction withinTransaction)
{
    MonthlyFinancialReportCollection records = null;

    using (DataSet ds = Helpers.GetDataSet("ShowPremiumCalcReport", withinTransaction))
    {
        if (ds.Tables.Count > 0)
        {
            records = new MonthlyFinancialReportCollection();

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                if (!string.IsNullOrEmpty(dr[0].ToString())) 
                     records.Add(FillDataRecord(dr));                        
            }
        }
    }

    return records;
}

现在我想针对上述函数中调用的过程运行一个查询,因此它将用查询的计算结果填充列之一。

select 
    Sum(WorkingHours.WHO_Amount * dbo.PremiumLevel.PLE_Premium) as Snr_Teaching_Amt
from policy, policyline, coveroption,
     premiumlevel, WorkingHours
where policy.pol_id=policyline.pli_pol_id 
and   policyline.pli_cop_seniorteachingcoverid=coveroption.cop_id 
and   premiumlevel.ple_own_id=policy.pol_own_id 
and   premiumlevel.ple_sca_id=coveroption.cop_sca_id 
and   WorkingHours.who_pos_id=policyline.pli_pos_id
and   pol_dcsf=row["snr teaching staff"]`
4

2 回答 2

0

这不是问题

第一个选项

 You execute the first stored procedure.
 Then foreach row 
    You execute the Second one with a parameter from the first one
 endfor

第二种选择:

 You use a Cursor on the first stored procedure to get all the results in one call
于 2012-09-03T14:10:06.597 回答
0

最慢和最简单的方法:

  • 使您的第二个查询成为接受“snr 教学人员”作为参数的存储过程。
  • 从第一个查询中向 DataTable 添加一个新列:ds.Tables[0].Columns.Add("Snr_Teaching_Amt", typeof(decimal));
  • 为您创建的第二个存储过程创建一个 SqlCommand 和一个 SqlParameter。
  • 循环DataTable并将“snr教员”放入SqlParameter的值中。
  • 使用 ExecuteScalar 运行 SqlCommand,返回值是第二个查询的结果,您可以将其保存在创建的列中。

但是我不推荐这种方式,因为您将有 55 + 1 个服务器往返,这并不酷。

中间的方式:

由于您的第二个查询返回单个值,因此将第二个查询设为 Sql 函数。您可以在第一个过程中调用它,例如:

SELECT *, dbo.MyFunction([snr teaching staff]) AS Snr_Teaching_Amt FROM ...

这将具有更好的性能并且更易于维护。但是我同意马萨努的观点,您可以使用子查询组合这些过程。祝你好运;-)

于 2012-09-03T15:26:36.000 回答