2011-12-19 2 views
2

SQL 함수에서 데이터를 생성하는 쿼리에서 임시 테이블을 생성합니다. 이 임시 테이블을 사용하여 임시 테이블의 각 데이터 행에 대한 삽입을 수행하고 싶습니다. 이것을 진행하는 가장 좋은 방법은 무엇입니까? 테이블 EmpHours 이미 직원의 시간으로 채워집니다Foreach, Cursor 또는 다른 것?

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 

하지만 계산 자신의 시간당 상당 (로 업데이트해야합니다 : (단순화를 위해 도시되지 않은 모든 열)를 다음과 같이

#tmpTable입니다 앞에서 설명한 기능들). 그 중요한 경우 내가 수행해야 업데이트

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

수는 50 아래 다음과 같이 나는 임시 테이블에서 각 직원에 대한 업데이 트를 수행 할.

답변

4

SQL은 행 단위 업데이트가 아닌 단일 명령으로 이와 같은 작업을 수행하는 것이 훨씬 효율적입니다. 이 시나리오에서는 행 수가 많지 않지만 루프 또는 커서를 사용하는 대신 집합 기반 방식을 사용하는 것이 좋습니다. 다른 테이블의 #tmpTable

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

+1 항상 세트 기반 작업 – squillman

+0

갈 :

처럼 마이클이 언급
insert into tablename select EmpID, WorkHours, HourlyEquivalent, WeekOf from #tmpTable 

업데이트는 다음과 같이이다 : 가정하면 두 테이블은 동일한 구조가이 같은 것이 1 - RBAR 기법 (행 * Agonizing * 행)을 피하기 위해 항상 조언하십시오 – MatBailie

+0

감사합니다. – BrianKE

1

insert 모든 행이 한 번에 모든 것을 할 수 있습니다. +

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