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的新資料表。 此資料表的第一個資料行是發生衝突之資料表的名稱。 第二個數據行會提供資料表中發生衝突的資料列數目。 報告衝突的資料表如下所示。

資料行 類型 答案 Nullable
資料表 Text
NumRowMergeConflicts 整數  
 

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

如果函式失敗,您可以使用 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
目標平台 Windows
標頭 msiquery.h
程式庫 Msi.lib
Dll Msi.dll

另請參閱

資料行定義格式

資料庫管理功能