共用方式為


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 不會將內嵌 封包檔案內嵌 轉換從參考資料庫複製到目標資料庫。 二進製表圖示數據表 中所列的內嵌數據流會從參考資料庫複製到目標資料庫。 內嵌在參考資料庫中的記憶體不會複製到目標資料庫。

MsiDatabaseMerge 函式會合併兩個資料庫的數據。 這些資料庫必須有相同的代碼頁。 如果資料庫中有任何數據表或數據列發生衝突,MsiDatabaseMerge 就會失敗。 如果第一個資料庫中任何數據列中的數據與第二個資料庫的對應數據列中的數據不同,就會發生衝突。 對應的數據列位於兩個資料庫的相同數據表中,而且兩個資料庫中都有相同的主鍵。 非衝突資料庫的數據表必須具有相同的主鍵數目、相同的數據行數目、相同的數據行類型、相同的數據行名稱,以及具有相同主鍵的數據列中相同的數據。 不過,暫存數據行在數據行計數和對應數據表中並不重要,只要持續性數據行相符,就可以有不同的暫存數據行數目,而不會造成衝突。

如果對應數據表中的數據行數目、類型或名稱不同,則兩個資料庫的架構不相容,而且安裝程式會停止處理數據表,合併會失敗。 安裝程式會先檢查兩個資料庫是否具有相同的架構,再檢查數據列合併衝突。 如果傳回ERROR_DATATYPE_MISMATCH,您保證資料庫尚未變更。

如果特定數據列的數據不同,這是數據列合併衝突,安裝程式會傳回ERROR_FUNCTION_FAILED,並建立名為 szTableName的新數據表 。 此資料表的第一個數據行是發生衝突之數據表的名稱。 第二個數據行會提供數據表中發生衝突的數據列數目。 報告衝突的數據表如下所示。

類型 鑰匙
桌子 文字 Y N
NumRowMergeConflicts 整數   N
 

無法從自定義動作呼叫此函式。 從自定義動作呼叫此函式會導致函式失敗。

如果函式失敗,您可以使用 MsiGetLastErrorRecord取得擴充錯誤資訊。

注意

msiquery.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiDatabaseMerge 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 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
目標平臺 窗戶
標頭 msiquery.h
連結庫 Msi.lib
DLL Msi.dll

另請參閱

資料行定義格式

Database Management Functions