Foreach,Cursor或其他什么?

时间:2011-12-19 16:54:25

标签: sql foreach cursor

我正在从查询中创建临时表,该查询从SQL函数生成数据。我想使用这个临时表来为临时表中的每一行数据执行插入。进行此操作的最佳方法是什么?

#tmpTable如下(为简单起见,并未显示所有列):

EmpID       WorkHours      HourlyEquivalent     WeekOf
asmith      12             8.94                 12/5/2011
bjones      23.5           12.75                12/5/2011
criley      40             7.89                 12/5/2011

表EmpHours已经填写了员工时间,但需要更新其每小时等值(根据上述功能计算)。我想从临时表中为每个员工执行UPDATE,如下所示:

UPDATE EmpHours
SET HourlyEquivalent
WHERE WeekOf = #tmpTable.WeekOf
    AND EmpID = #tmpTable.EmpID

如果重要的话,我需要执行的UPDATE数量少于50个。

2 个答案:

答案 0 :(得分:4)

SQL在单个命令中执行此类操作时效率更高,而不是逐行更新。尽管在这种情况下你没有很多行,但采用基于集合的方法而不是使用循环或游标仍然是一个好习惯。

UPDATE e
SET HourlyEquivalent = t.HourlyEquivalent
FROM
    EmpHours e JOIN
    #tmpTable t ON t.WeekOf = e.WeekOf AND t.EmpID = e.EmpID

答案 1 :(得分:1)

insert在另一个表中#tmpTable的所有行,您可以一次完成所有这些行。 假设两个表具有相同的结构,就像这样:

insert into tablename
select EmpID, WorkHours, HourlyEquivalent, WeekOf from #tmpTable

像迈克尔所说,更新是这样的:

UPDATE e
SET HourlyEquivalent = t.HourlyEquivalent
FROM
    EmpHours e JOIN
    #tmpTable t ON t.WeekOf = e.WeekOf AND t.EmpID = e.EmpID