다음을 통해 공유


MsiDatabaseMergeA 함수(msiquery.h)

MsiDatabaseMerge 함수는 두 데이터베이스를 함께 병합하여 중복 행을 허용합니다.

구문

UINT MsiDatabaseMergeA(
  [in] MSIHANDLE hDatabase,
  [in] MSIHANDLE hDatabaseMerge,
  [in] LPCSTR    szTableName
);

매개 변수

[in] hDatabase

MsiOpenDatabase에서 가져온 데이터베이스에 대한 핸들입니다.

[in] hDatabaseMerge

기본 데이터베이스에 병합하기 위해 MsiOpenDatabase 에서 가져온 데이터베이스에 대한 핸들입니다.

[in] szTableName

병합 충돌 정보를 받을 테이블의 이름입니다.

반환 값

MsiDatabaseMerge 함수는 다음 값 중 하나를 반환합니다.

반환 코드 설명
ERROR_FUNCTION_FAILED
행 병합 충돌이 보고되었습니다.
ERROR_INVALID_HANDLE
잘못되었거나 비활성 핸들이 제공되었습니다.
ERROR_INVALID_TABLE
잘못된 테이블이 제공되었습니다.
ERROR_SUCCESS
함수가 성공했습니다.
ERROR_DATATYPE_MISMATCH
두 데이터베이스 간의 스키마 차이입니다.

설명

설치 패키지에 포함된 모듈을 병합하는 데는 MsiDatabaseMerge 함수와 Database 개체의 Merge 메서드를 사용할 수 없습니다. 병합 모듈을 Windows Installer 패키지에 병합하는 데 사용하면 안 됩니다. 설치 패키지에 병합 모듈을 포함하려면 설치 패키지 작성자가 병합 모듈 적용 항목에 설명된 지침을 따라야 합니다.

MsiDatabaseMerge 는 포함된 캐비닛 파일 또는 포함된 변환을 참조 데이터베이스에서 대상 데이터베이스로 복사하지 않습니다. Binary 테이블 또는 Icon 테이블에 나열되어 있는 포함된 데이터 스트림은 참조 데이터베이스에서 대상 데이터베이스로 복사됩니다. 참조 데이터베이스에 포함된 스토리지는 대상 데이터베이스에 복사되지 않습니다.

MsiDatabaseMerge 함수는 두 데이터베이스의 데이터를 병합합니다. 이러한 데이터베이스에는 동일한 코드 페이지가 있어야 합니다. 데이터베이스의 테이블이나 행이 충돌하는 경우 MsiDatabaseMerge가 실패합니다. 첫 번째 데이터베이스의 행에 있는 데이터가 두 번째 데이터베이스의 해당 행에 있는 데이터와 다른 경우 충돌이 발생합니다. 해당 행은 두 데이터베이스의 동일한 테이블에 있으며 두 데이터베이스에서 동일한 기본 키를 갖습니다. 충돌하지 않는 데이터베이스의 테이블에는 동일한 수의 기본 키, 동일한 수의 열, 동일한 열 형식, 동일한 열 이름 및 동일한 기본 키가 있는 행의 동일한 데이터가 있어야 합니다. 그러나 임시 열은 열 수에서 중요하지 않으며 해당 테이블은 영구 열이 일치하는 한 충돌을 만들지 않고 다른 수의 임시 열을 가질 수 있습니다.

해당 테이블의 열 수, 형식 또는 이름이 다른 경우 두 데이터베이스의 스키마가 호환되지 않으며 설치 관리자가 테이블 처리를 중지하고 병합이 실패합니다. 설치 관리자는 행 병합 충돌을 확인하기 전에 두 데이터베이스에 동일한 스키마가 있는지 확인합니다. ERROR_DATATYPE_MISMATCH 반환되는 경우 데이터베이스가 변경되지 않은 것이 보장됩니다.

특정 행의 데이터가 다르면 행 병합 충돌 설치 관리자는 ERROR_FUNCTION_FAILED 반환하고 szTableName이라는 새 테이블을 만듭니다. 이 테이블의 첫 번째 열은 충돌이 있는 테이블의 이름입니다. 두 번째 열은 충돌이 있는 테이블의 행 수를 제공합니다. 충돌을 보고하는 테이블은 다음과 같이 표시됩니다.

형식 Nullable
테이블 Text Y N
NumRowMergeConflicts 정수   N
 

이 함수는 사용자 지정 작업에서 호출할 수 없습니다. 사용자 지정 작업에서 이 함수를 호출하면 함수가 실패합니다.

함수가 실패하면 MsiGetLastErrorRecord를 사용하여 확장된 오류 정보를 얻을 수 있습니다.

참고

msiquery.h 헤더는 MSiDatabaseMerge를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Server 2012, Windows 8, Windows Server 2008 R2 또는 Windows 7의 Windows Installer 5.0. Windows Server 2008 또는 Windows Vista의 Windows Installer 4.0 또는 Windows Installer 4.5. Windows Server 2003 또는 Windows XP의 Windows Installer
대상 플랫폼 Windows
헤더 msiquery.h
라이브러리 Msi.lib
DLL Msi.dll

추가 정보

열 정의 형식

데이터베이스 관리 함수