2011-04-19 4 views
2

Sql Sever 2008에 대한 MERGE 구문을 기본적으로 이해하고 있지만 개념의 고급 사용에 대한 질문이 있습니다.Sql Server 2008에서 MERGE 키워드를 이해하는 데 도움이 필요합니다.

30 명의 선수가있는 스포츠 팀이 있다고 상상해보십시오. 각 플레이어는 테이블에있는 레코드입니다. 이제 시즌 중반에 부상을 입은 일부 선수들은 부상을 입어 새로운 피가 도착하여 선수들을 대체했습니다.

이 변경 사항을 정확하게 반영하기 위해 데이터베이스 테이블을 업데이트하고 싶습니다. 나는 MERGE 구문을 사용할 때 새로운 플레이어가 존재하지 않는 경우

은 그래서, 다음이 삽입됩니다 :

WHEN NOT MATCHED THEN 
    INSERT blah blah blah... 
    VALUES (blah blah and more blah).. 

과 일치 할 때, 다음, 아무것도하지 않습니다. (그래서 나는 어떤 WHEN MATCHED THEN 절도 가질 필요가 없다).

하지만 퇴장 한 선수들은 어떻게 될까요? WHEN NOT MATCHED BY SOURCE THEN <merge_matched>이 나오는 곳이 있습니까 (붐 티쉬)?

그렇다면 누군가 내가 어떻게 사용해야하는지 제안 할 수 있습니까?

답변

8

그런 병합을 사용할 수는 있지만 새 팀의 원본 테이블은 수정되지 않은 원본 팀을 포함해야합니다. 다음은 간단한 샘플입니다.

시즌 코치가 세 오히려 오래된 QB의와 팀을 가지고 최적이 아닌 것을 실현이 팀과 함께 시즌을 통해

PlayerName   Position 
-------------------- -------- 
Brett Favre   QB 
Joe Montana   QB 
John Elway   QB 

절반 방법을 시작합니다. 브렛은 그만두고 조는 가야한다. 존은 RB를 플레이하고 동시에 우리는 일을 시작하기 위해 몇 명의 젊은이가 필요합니다.

PlayerName   Position 
-------------------- -------- 
Brett Favre   QB 
John Elway   RB 
Jerry Rice   WR 
Karl Mecklenburg  LB 

병합 문은 Team-NewTeam이 같을 것이다 병합합니다.

merge Team as T 
using NewTeam as S 
on S.PlayerName = T.PlayerName 
when matched then 
    update set Position = S.Position 
when not matched by target then 
    insert (PlayerName, Position) values (S.PlayerName, S.Position) 
when not matched by source then 
    delete; 
+0

완벽한 설명 :) 나는 이것을 줄 것이다 :) –

2

예, 은 퇴장 한 선수를 돌볼 수있는 섹션입니다.

doc에 따르면 UPDATE (예 : 에 Active 공언을 설정) 또는 거기에있는 DELETE 명령을 사용할 수 있습니다.

문서에서 두 개의 섹션이있을 수 있습니다. 이 경우 그 중 하나는 추가 조건으로 정의되고 만 UPDATE 명령을 받아 들일 수 :

WHEN NOT MATCHED BY SOURCE AND condition THEN 
    UPDATE SET ...

는 다른 조건을 사용해서는 안하고 DELETE 명령을 위해 예약되어 있습니다.

관련 문제