我正在从查询中创建临时表,该查询从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个。
答案 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