mssql merge 예제

Am 현재 내 코드에서 병합 함수를 내포하고 있으며, 어떤 이유로 업데이트가 완료되면 일치하는 행이 대상 테이블에서 업데이트되지 않고 대상 테이블에 삽입된 일치하지 않는 행만 업데이트됩니다. 예를 들어 BookInventory 테이블에 원래 삽입된 행 중 하나는 Catch 22 책용입니다. 해당 책의 수량 값은 책에 대한 주문이 없기 때문에 업데이트되지 않았습니다. 해당 책의 사본이 없기 때문에 대상 테이블에서 해당 책을 삭제할 수 있습니다. 원본 테이블의 행과 일치하지 않는 행을 삭제하려면 SOURCE에 의해 일치하지 않을 때 절을 사용해야 합니다. 이 작동 방식을 이해하는 데 문제가 있는 경우 병합 조건이 조인 조건과 같다고 생각하십시오. 녹색 섹션의 행은 병합 조건과 일치하는 행을 나타내고 파란색 섹션의 행은 SourceTable에 있지만 대상에는 없는 행입니다. 주황색 섹션의 행은 대상에서만 발견되는 행입니다. 병합 문에서 일치하는 경우 두 절만 지정할 수 있습니다. 두 개의 WHEN MATCHED 절이 지정되면 한 절에는 업데이트 작업이 있어야 하고 다른 절은 delete 작업을 사용해야 합니다. MERGE 문에 대 한 예제에 대 한 아래 T-SQL 스크립트를 참조 하십시오 두 때 일치 하는 절. 둘째, merge_condition는 원본 테이블의 행이 대상 테이블의 행과 일치하는 방법을 결정합니다.

조인 절의 조인 조건과 유사합니다. 일반적으로 키 열을 기본 키 또는 고유한 키로 일치시 사용합니다. 아주 좋은 일! 내가 추가 할 유일한 것은 WHEN 절에 더 많은 조건자가있는 예제입니다 –

ON 반환 된 행과 일치하지 않는 target_table의 모든 행에 적용되는 업데이트 또는 삭제 작업을 지정하고, 추가 검색 조건을 충족합니다. 먼저 @MergeOutput 테이블 변수를 선언합니다. 변수에는 작업 유형에 대한 열과 세 개의 추가 열 집합이 포함됩니다. 각 집합은 대상 테이블의 열에 해당하며 삭제된 데이터와 삽입된 데이터를 표시하는 열을 포함합니다. 예를 들어 DelTitleID 및 InsTitleID 열은 대상 테이블에서 각각 삭제및 삽입된 값에 해당합니다. 다음 예제에서는 OUTPUT 절을 사용하여 출력된 데이터를 @MergeOutput라는 변수로 전달합니다. 일치하는 행의 다른 값입니다. 행이 일치하는 경우 MATCHED WHEN 절을 사용하여 대상 테이블의 데이터를 수정할 수 있습니다.

예제를 통해 어떻게 작동하는지 보여 줄 수 있습니다. 성능 팁: MERGE 문에 대해 설명된 조건부 동작은 두 테이블에 일치하는 특성이 복잡한 혼합이 있는 경우에 가장 적합합니다. 예를 들어 행이 없는 경우 삽입하거나 일치하는 경우 행을 업데이트합니다. 다른 테이블의 행을 기반으로 한 테이블을 업데이트하기만 하면 기본 INSERT, UPDATE 및 DELETE 문을 통해 성능과 확장성을 향상시킬 수 있습니다. 예를 들어 merge 문이 WHEN MATCHED 절과 함께 지정된 추가 검색 조건을 충족하지 못했기 때문에 locationID 1로 행이 업데이트되지 않았음을 확인할 수 있습니다. merge 문에 지정된 모든 작업에 대한 트리거 대신 아래 예제를 참조하십시오. merge 문의 OUTPUT 절은 대상 테이블에서 수정된 각 행에 대해 하나의 행을 반환합니다.