2012-09-23 2 views
1

나는이 멋진 기능에 대해 알게되었습니다. 나는 몇 가지 질문을한다. 아래 진술을 고려하십시오.SQL Server 2008에서 MERGE 사용

어떻게 작동하는지 이해하는 방법입니다. USING 문은 일치하는 항목이 있는지 비교하기 위해 비교됩니다. 지금은 어떻게 사용하고 싶지만 MATCH 부분의 소스 테이블에서 다른 두 개의 열을 사용하려고합니다. 나는 그것을 할 수 없다. 그래서 거기에 2 열 (decesed (나는 그 철자가 잘못된 :) :) 및 hicno_enc) 철자를 사용할 수있는 방법이 무엇입니까?
내가 할 수있는 일은 가능한지 모르지만 행이 대상에는 있지만 소스가 아닌 경우에는 비활성으로 표시하십시오.

SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE 
FROM 
    aco.tmpimport i 
    INNER JOIN aco.patients p 
    ON p.hicnoenc = i.hicno_enc 
    MERGE aco.patients AS target 
    USING (
      SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE 
      FROM aco.tmpimport 
     ) AS source 
    ON target.hicnoenc = source.hicno_enc 
    WHEN MATCHED AND target.isdeceased <> CONVERT(BIT,source.decesed) THEN 
     UPDATE 
      SET 
       target.isdeceased = source.decesed, 
       updatedat = getdate(), 
       updatedby = 0 
    WHEN NOT MATCHED THEN 
     INSERT (firstname, lastname, gender, dob, isdeceased, hicnoenc) 
     VALUES (source.FIRST_NAME, 
       source.LAST_NAME, 
       source.sex1, 
       source.BIRTH_DATE, 
       source.decesed, 
       source.hicno_enc); 

답변

2

그래서 나는 2 열 사용 방법 (decesed을 (내가 아는 그 잘못된 철자 :)) 및 hicno_enc)는 무엇입니까?

select 절에 필요한 절을 using 절에 추가하십시오. 행이 대상이 아닌 소스에있는 경우

USING (
     SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE, decesed, hicno_enc 
     FROM aco.tmpimport 
    ) AS source 

, 다음 비활성 표시합니다.

when not matched by source 절을 추가하고 업데이트하십시오.

WHEN NOT MATCHED BY SOURCE THEN 
    UPDATE 
     SET active = 0 
+0

그건 제가 언급 한 것들 중 하나입니다. 선택에 2 개의 열을 추가하면 목표에 해당하는 모든 열을 일치 시키려고합니다. 그 2 개는 다를 수 있기 때문에 나는 그 (것)들에 일치하고 싶지 않다, 그러나 나는 그 (것)들을 이용할 수 있고 싶다. – dbinott

+0

아니요. using 절에 있기 때문에 일치하는 데 자동으로 사용되지 않습니다. –

+0

오, 그래서이 target.hicnoenc = source.hicno_enc에 일치합니다? 우수한. – dbinott

관련 문제