2013-07-16 4 views
2

다음 코드가 있습니다.복제 확인이있는 DISTINCT 선택

INSERT INTO [dbo].[Employees_Dim] ([EmpNo], [EmpName]) 
SELECT DISTINCT st.[EmpNo], [EmpName] 
FROM [dbo].[EEMasterData] st 

직원 차원을 만들려면 마스터 테이블에서 두 개의 열을 가져오고 싶습니다. (이 마스터 테이블에서 오는 다른 차원에 대해 복제됩니다.)

마스터 데이터를 볼 수있는 SSIS 패키지에서 스크립트를 실행할 수 있고 Employee_Dim을 참조하고 직원 번호를 기준으로 새 직원 만 추가 할 수 있기를 원합니다.

내가 무엇을 놓치고 있는지 정확히 알지 못합니다.

업데이트 : 내가 가진 질문은 EmpNo를 키로 사용하여 EEMasterData 테이블의 새로 추가 된 직원 만 EmployeeDim에 삽입하는 위 스크립트에 무엇을 추가해야합니까? 그건 당신이 직면하고있는 문제가있는 경우

+4

을 (EMPNO는 각 직원에 대해 고유 한 것으로 가정) 어느 쪽도 우리가 :) 귀하의 질문은 무엇입니까? – logixologist

+0

죄송합니다.이 항목을 추가하려고합니다. 위의 질문을 업데이트했습니다. –

답변

4

... 만 신입 사원을 추가 ...

, 이미 차원 테이블에을 존재하지 않는 항목 만 선택 :

INSERT INTO [dbo].[Employees_Dim] ([EmpNo], [EmpName]) 
SELECT DISTINCT st.[EmpNo], [EmpName] 
FROM [dbo].[EEMasterData] st 
WHERE st.[EmpNo] NOT IN (SELECT EmpNo FROM Employees_Dim) 

+0

올바른지, EmpNo는 각 직원마다 고유합니다. 나는 이것을 시도 할 것이다, 나는 이것이 내가 찾고 있었던 것이라고 생각한다. 고맙습니다. –

+1

SQL Server 2008 이상 (아마 2005 년)을 사용하는 경우 '존재하지 않는 곳 (SELECT 1 FROM Employees_Dim edim WHERE edim.EmpNo = st.EmpNo)'을 수행하는 것이 더 빠릅니다. –

+1

@tommy_o : 확실합니까 (= 측정 했습니까)? Employees_Dim.EmpNo도 st.EmpNo도 Nullable이 아닌 경우 두 버전은 의미 상 동일합니다. 그렇다면 왜 쿼리 최적화 프로그램이 다른 실행 계획을 선택해야합니까? – Heinzi