將變更套用到目的地

適用於:SQL ServerAzure Data Factory 中的 SSIS Integration Runtime

在執行變更資料增量載入的 Integration Services 套件資料流程中,第三個也是最後一個工作是將變更套用至您的目的地。 您將需要一個元件來套用插入、一個元件來套用更新,以及一個元件來套用刪除。

注意

在設計可執行變更資料增量載入之套件的資料流程時,第二項工作是區分插入、更新和刪除。 如需此元件的詳細資訊,請參閱 處理插入、更新與刪除。 如需建立可執行變更資料增量載入之套件的整體流程說明,請參閱異動資料擷取 (SSIS)。

套用插入項目

若要套用插入,您可以使用 OLE DB 目的地,因為新的資料列不需要任何特殊處理。

使用 OLE DB 目的地來處理插入

  1. 在 [資料流程] 索引標籤上,加入 OLE DB 目的地。

  2. 將包含插入的輸出從「條件式分割」轉換連接到 OLE DB 目的地。

  3. 在 [OLE DB 目的地編輯器]的 [連接管理員] 頁面上,選取下列選項:

    1. 針對目的地資料庫選取或建立 OLE DB 連接管理員。

    2. 選取 [資料存取模式] 選項,然後選取目的地資料表,或輸入包含目的地資料行的 SQL 陳述式。

  4. 在編輯器的 Mappings 頁面,將變更資料中的適當資料行對應至目標資料表。

套用更新

若要套用更新,您可以使用「OLE DB 命令」轉換。 你使用這個轉換是因為你必須用參數化 UPDATE 語句,逐列更新新的欄位值。

注意

您也可以使用目的地元件套用更新。 使用這個方式時,您可以使用目的地元件,將資料列儲存到針對此用途所建立的暫存資料表。 接著,您可以使用「執行 SQL」工作,利用暫存資料表中的資料對目的地資料表執行大量更新與大量刪除作業。

使用 OLE DB 命令轉換處理更新

  1. 在 [資料流程] 索引標籤上,加入「OLE DB 命令」轉換。

  2. 將「條件式分割」轉換中包含更新的輸出連接至「OLE DB 命令」轉換。

  3. 在 [OLE DB 命令的進階編輯器]的 [連接管理員] 索引標籤上,選取或建立目的地資料庫的 OLE DB 連接管理員。

  4. 在 OLE DB Command 的進階編輯器中,於 元件屬性 索引標籤上的 SqlCommand 中,輸入參數化的UPDATE陳述式。

    例如, UPDATE 客戶資料表的語句可能具有以下語法:

    update CDCSample.Customer  
    set TerritoryID  = ?,  
        CustomerType  = ?,  
        rowguid  = ?,  
        ModifiedDate  = ?  
    where CustomerID = ?  
    
    
  5. 在編輯器的 欄位映射 標籤中,將變更資料中的相應欄位映射到語句中的 UPDATE 參數。

正在套用刪除作業

若要執行刪除作業,請使用「OLE DB 命令」轉換。 你使用這個轉換是因為你必須使用一個參數化 DELETE 的語句,根據唯一識別該列的欄位值,逐一刪除該列。

注意

您也可以使用目標元件來執行刪除作業。 使用這個方式時,您可以使用目的地元件,將資料列儲存到針對此用途所建立的暫存資料表。 接著,您可以使用「執行 SQL」工作,利用暫存資料表中的資料對目的地執行大量更新和大量刪除作業。

使用 OLE DB 命令轉換處理刪除作業

  1. 在 [資料流程] 索引標籤上,將「OLE DB 命令」轉換加入到資料流程。

  2. 將「條件分割」轉換中包含刪除資料的輸出連接到「OLE DB 命令」轉換。

  3. 開啟 [進階編輯器] 來設定轉換。

  4. 在 [OLE DB 命令的進階編輯器]的 [連接管理員] 索引標籤上,選取或建立目的地資料庫的 OLE DB 連接管理員。

  5. 在 OLE DB 指令的 進階編輯器 中,編輯器的元件屬性標籤中,為 SqlCommand 輸入參數化DELETE語句。

    例如,客戶資料表的 DELETE 語句可能具有以下語法:

    delete from Customer where CustomerID = ?  
    
    
  6. 在編輯器的 欄位映射 標籤中,將變更資料中相應的欄位映射到語句中的 DELETE 參數。

使用 MERGE 功能最佳化插入與更新

你可以透過將某些變更資料擷取選項與 Transact-SQL MERGE 關鍵字搭配使用,來最佳化插入和更新作業的處理。 欲了解更多關鍵字資訊MERGE,請參見 MERGE (Transact-SQL)

在用來擷取變更資料的 Transact-SQL 陳述式中,當您呼叫 cdc.fn_cdc_get_net_changes_<capture_instance> 函數時,可以指定 all with merge 作為 row_filter_option 參數的值。 當這個異動資料擷取函數不必執行區別插入與更新所需的額外處理時,其運作會更有效率。 當您指定 all with merge 參數值時,變更資料的 __$operation 值為 1 (針對刪除) 或 5 (針對插入或更新所造成的變更)。 如需用於擷取變更資料之 Transact-SQL 函數的詳細資訊,請參閱 擷取與了解變更資料。利用 all with merge 參數值擷取變更後,您可以套用刪除,並將剩餘的資料列輸出到暫存資料表或臨時資料表。 接著,在下游執行 SQL 任務中,你可以用一個 MERGE 語句將所有從暫存表的插入或更新套用到目的地。