MsiDatabaseMergeW 関数 (msiquery.h)
MsiDatabaseMerge 関数は 2 つのデータベースを結合し、重複する行を許可します。
構文
UINT MsiDatabaseMergeW(
[in] MSIHANDLE hDatabase,
[in] MSIHANDLE hDatabaseMerge,
[in] LPCWSTR szTableName
);
パラメーター
[in] hDatabase
MsiOpenDatabase から取得したデータベースへのハンドル。
[in] hDatabaseMerge
ベース データベースにマージする MsiOpenDatabase から取得したデータベースへのハンドル。
[in] szTableName
マージの競合情報を受け取るテーブルの名前。
戻り値
MsiDatabaseMerge 関数は、次のいずれかの値を返します。
リターン コード | 説明 |
---|---|
|
行のマージの競合が報告されました。 |
|
無効なハンドルまたは非アクティブなハンドルが指定されました。 |
|
無効なテーブルが指定されました。 |
|
関数が正常に実行されました。 |
|
2 つのデータベース間のスキーマの違い。 |
注釈
Database オブジェクトの MsiDatabaseMerge 関数と Merge メソッドを使用して、インストール パッケージに含まれるモジュールをマージすることはできません。 これらは、Windows インストーラー パッケージに Merge モジュールをマージするために使わないでください。 インストール パッケージの作成者がインストール パッケージに Merge モジュールを含めるには、「マージ モジュールの適用」トピックで説明されているガイドラインに従ってください。
MsiDatabaseMerge は、埋め込み キャビネット ファイル または 埋め込み変換 を参照データベースからターゲット データベースにコピーしません。 バイナリ テーブルまたはアイコン テーブルに一覧表示されている埋め込みデータ ストリームは、参照データベースから対象のデータベースにコピーされます。 参照データベースに埋め込まれたストレージは、ターゲット データベースにコピーされません。
MsiDatabaseMerge 関数は、2 つのデータベースのデータをマージします。 これらのデータベースには同じコード ページが必要です。 データベース内のテーブルまたは行が競合する場合、MsiDatabaseMerge は失敗します。 最初のデータベースの任意の行のデータが、2 番目のデータベースの対応する行のデータと異なる場合、競合が存在します。 対応する行は両方のデータベースの同じテーブル内にあり、両方のデータベースで同じ主キーを持ちます。 競合しないデータベースのテーブルには、同じ数の主キー、同じ数の列、同じ列の種類、同じ列名、同じ主キーを持つ行内の同じデータが必要です。 ただし、一時列は列数に関係なく、永続的な列が一致する限り競合を生じることなく、対応するテーブルに異なる数の一時列を含めることができます。
対応するテーブル内の列の数、型、または名前が異なる場合、2 つのデータベースのスキーマに互換性がありません。インストーラーはテーブルの処理を停止し、マージは失敗します。 インストーラーは、行のマージ競合をチェックする前に、2 つのデータベースのスキーマが同じであることを確認します。 ERROR_DATATYPE_MISMATCHが返された場合は、データベースが変更されていないことが保証されます。
特定の行のデータが異なる場合、これは行マージの競合であり、インストーラーは ERROR_FUNCTION_FAILEDを返し、szTableName という名前の新しいテーブルを作成します。 このテーブルの最初の列は、競合しているテーブルの名前です。 2 番目の列は、競合しているテーブル内の行数を示します。 競合を報告するテーブルは次のように表示されます。
列 | 種類 | キー | Nullable |
---|---|---|---|
テーブル | テキスト | Y | × |
NumRowMergeConflicts | 整数 | N |
この関数は、カスタム アクションから呼び出すことはできません。 カスタム アクションからこの関数を呼び出すと、関数は失敗します。
関数が失敗した場合は、 MsiGetLastErrorRecord を使用して拡張エラー情報を取得できます。
注意
msiquery.h ヘッダーは、MSIDatabaseMerge をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー |
対象プラットフォーム | Windows |
ヘッダー | msiquery.h |
Library | Msi.lib |
[DLL] | Msi.dll |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示