Sql-Server

SSIS 數據源:嵌入式查詢、儲存過程或函式

  • November 7, 2018

我們正在將數據從 OLTP 伺服器移動到數據倉庫伺服器,利用 SSIS 來執行此操作。

從 OLTP 數據源編寫查詢時,最好使用它嗎?

  1. 內聯嵌入式查詢

  2. 功能

3)或儲存過程

在研究和測試中 - 嵌入式查詢很棒,但是我們希望將程式碼放在 SSDT 數據庫項目中來建構/編譯。因此,如果列名更改/刪除,我們會在 Devops 部分知道。如果在 SSIS 數據源“測試 abcd 等”中寫入,SSIS 仍將建構/編譯。如果在 SQL 數據庫項目中寫入,“從 dbo.exampletable 中選擇 testabcd”,SSDT DB 項目將無法建構/編譯。

我聽說函式很棒,因為它會顯示元數據。但是,多語句表值函式很慢,團隊需要一些時間。

我正在閱讀的儲存過程在創建元數據方面存在問題。這是真的 ?是否有解決方法,聽說可以在儲存過程中創建元數據。

有人可以讓我知道三個或任何其他選項之間的好選擇嗎?


    • 不想合併視圖,因為團隊希望通過源創建/更新日期參數化查詢,如果打算重新處理數據。

在此處輸入圖像描述

我建議使用儲存過程。至於元數據的問題,這可能在使用臨時表時發生。使用WITH RESULT SETS執行儲存過程的選項將允許您定義列的元數據,而 SSIS 可以繞過此步驟。下面是一個例子。另請注意,如果要更改任何列定義或添加新列,則也需要更新。

您也可能會在使用 OLE DB 源的參數時遇到問題,如螢幕截圖所示。然而,這可以通過對數據訪問欄位使用“來自變數的 SQL 命令”選項來克服。可以將字元串變數創建為使用發送到包(或項目)的參數執行儲存過程的表達式。下面是一個例子。此範例使用該DT_STR函式將數字參數轉換為字元串以將其連接起來。這對於字元串參數或課程不是必需的,我僅在您使用數字參數的情況下才包含它。該WITH RESULT SETS選項也可用於將其與遵循相同方法的參數連接的表達式中。

結果集

  EXEC ('dbo.YourSP')
   WITH RESULT SETS
     (
       (
           ColumnA INT,
           ColumnB VARCHAR(250),
           ColumnC DATETIME 
       )
     );

使用參數的變數表達式

"EXEC dbo.YourSP " +  (DT_STR, 10, 1252)@ @[$Package::YourParameter]

函式後續響應:如果您更喜歡使用函式並且它們更適合您的需求,您可以走這條路。我一般更喜歡儲存過程,因為它們提供了靈活性(執行 DML/DDL、使用臨時表等)。如果您確實使用函式,我建議在多語句表值版本上使用內聯。內聯函式本質上被視為一個視圖,並將使用適當的統計數據來創建更好的執行計劃,而多語句函式不會獲得這些好處。

引用自:https://dba.stackexchange.com/questions/221953