문이 부분 로드 중에만 실행되어야 함을 표시하는 선택적 한정자입니다. 일반(부분 아님) 로드 중에는 문이 무시됩니다.
SequenceNoField
작업 순서를 정의하는 타임스탬프 또는 시퀀스 번호가 포함된 필드의 이름입니다.
SequenceNoVar
병합되는 테이블의 SequenceNoField의 최댓값이 할당되는 변수의 이름입니다.
ListOfKeys
기본 키를 지정하는 쉼표로 구분된 필드 이름 목록입니다.
Operation
LOAD 문의 첫 번째 필드에는 'Insert', 'Update' 또는 'Delete'와 같은 텍스트 문자열 작업이 있어야 합니다. ‘i’, ‘u’ 및 ‘d’도 허용됩니다.
일반 기능
일반(부분 아님) 로드 중에 MergeLOAD 구조는 일반 Load 문으로 작동하지만 오래된 레코드 및 삭제 표시된 레코드를 제거하는 추가 기능으로 작동합니다. Load 문의 첫 번째 필드에는 작업에 대한 정보가 있어야 합니다. Insert, Update 또는 Delete
로드된 각 레코드에서 레코드 식별자가 이전에 로드된 레코드와 비교되고 최신 레코드(순서 번호에 따라)만 유지됩니다. 최신 레코드가 Delete로 표시되면 유지되는 레코드가 없습니다.
대상 테이블
필드 집합으로 결정되는 수정할 테이블입니다. 동일한 필드 집합이 있는 테이블(첫 번째 필드인 작업 필드 제외)이 이미 존재하는 경우 이 테이블이 수정할 관련 테이블이 됩니다. 또는 Concatenate 접두사를 사용하여 테이블을 지정할 수 있습니다. 대상 테이블이 결정되지 않은 경우 Merge LOAD 구조는 새 테이블에 저장됩니다.
Concatenate 접두사가 사용된 경우 결과 테이블에는 기존 테이블과 병합할 입력의 합집합에 해당하는 필드 집합이 있습니다. 따라서 대상 테이블에는 병합할 입력으로 사용되는 변경 로그보다 더 많은 필드가 있을 수 있습니다.
부분 로드도 전체 로드와 동일합니다. 한 가지 차이점은 부분 로드의 경우 새 테이블을 거의 만들지 않는다는 점입니다. Only 절을 사용하지 않은 경우 이전 스크립트 실행과 동일한 필드 집합이 있는 대상 테이블이 항상 존재합니다.
시퀀스 번호
로드된 변경 로그가 누적된 로그인 경우, 즉 이미 로드된 변경 사항이 포함된 경우 매개 변수 SequenceNoVar을 Where 절에서 사용하여 입력 데이터의 양을 제한할 수 있습니다. 그런 다음 필드 SequenceNoField가 SequenceNoVar보다 큰 레코드만 로드하도록 MergeLOAD를 만들 수 있습니다. 완료되면 MergeLOAD가 SequenceNoField 필드에 표시된 최댓값으로 SequenceNoVar에 새 값을 할당합니다.
작업
Merge LOAD는 대상 테이블보다 필드를 적게 포함할 수 있습니다. 작업마다 누락된 필드를 다르게 처리힙니다.
Insert: Merge LOAD에 누락되었지만 대상 테이블에 있는 필드는 대상 테이블에 NULL을 가져옵니다.
삭제: 누락된 필드는 결과에 영향을 미치지 않습니다. 관련 레코드는 삭제됩니다.
Update: Merge LOAD에 나열된 필드는 대상 테이블에서 업데이트됩니다. 누락된 필드는 변경되지 않습니다. 즉, 다음 두 문은 동일하지 않습니다.
Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;
첫 번째 문은 나열된 레코드를 업데이트하고 F2를 NULL로 변경합니다. 두 번째는 F2를 변경하지 않는 대신 대상 테이블의 값을 유지합니다.
정보 메모와일드카드가 있는 레코드에 Merge LOAD를 사용할 수 없습니다(예: 모든 값을 나타내는 별표가 있는 Section Access 테이블).
예 1: 지정된 테이블과 간단한 병합
이 예에서 Persons라고 명명된 인라인 테이블은 3개의 행으로 로드됩니다. 그런 다음 Merge를 통해 테이블이 다음과 같이 변경됩니다.
Mary, 4 행을 추가합니다.
Steven, 3 행을 삭제합니다.
Jake에 숫자 5를 할당합니다.
LastChangeDate 변수는 Merge가 실행된 후 ChangeDate 열의 최댓값으로 설정됩니다.
로드 스크립트
예제 스크립트를 앱에 추가하고 실행합니다. 결과를 보기 위해 결과 열에 나열된 필드를 앱의 시트에 추가합니다.
Set DateFormat='D/M/YYYY'; Persons: load * inline [ Name, Number Jake, 3 Jill, 2 Steven, 3 ]; Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD * inline [ Operation, ChangeDate, Name, Number Insert, 1/1/2021, Mary, 4 Delete, 1/1/2021, Steven, Update, 2/1/2021, Jake, 5 ];
다음 예에서 Only 인수는 Merge 명령이 부분 로드 중에만 실행되도록 지정합니다. 업데이트는 이전에 캡처된 LastChangeDate를 기반으로 필터링됩니다. Merge가 완료되면 LastChangeDate 변수에 병합 중에 처리된 ChangeDate 열의 최댓값이 할당됩니다.
로드 스크립트
Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons) LOAD Operation, ChangeDate, Name, Number from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt) where ChangeDate >= $(LastChangeDate);