有多種方法可以將值傳遞給 SSIS 包。我們可以使用變數、包引數或專案引數,也可以將值保存在表中并要求 SSIS 從表中選擇值。現在,我的編碼方式是使用專案引數并獲取變數以使用它們。當部署到 SSIS 目錄時,可以設定 ENV 以根據用戶要求覆寫 Param 值。現在,我正在權衡用戶設定 ENV 以傳遞引數值與設定表以在 SSIS 中保存值和代碼以選擇值的風險/易用性。請談談您對這兩種方法的優缺點的看法。
例如:假設我們有一個 SSIS 包來將資料保存到 CSV 檔案。并且必須保存 CSV 檔案的檔案夾路徑因服務器(DEV/UA/Prod)而異。最好將檔案夾路徑值與服務器名稱一起保存在表中,還是最好將檔案夾路徑值設定為引數并要求執行的用戶在執行時根據服務器在 ENV 中設定檔案夾值?
uj5u.com熱心網友回復:
根據我的經驗,最好使用執行 SQL 任務并將結果回傳給變數來處理變數。它是模塊化的,這意味著如果需要,可以輕松禁用某些步驟。
對于管理連接(無需直接硬編碼連接字串),我建議通過引數保存 CSV 檔案位置。可以通過 SQL 腳本代理在部署環境中修改引數,并且不需要更改源表。如果我能避免它,我永遠不會將檔案位置資訊放在源表中,因為它會使表的可匯出性降低。
uj5u.com熱心網友回復:
正如官方檔案中提到的:
Integration Services (SSIS) 引數允許您在包執行時為包內的屬性分配值。
SQL Server 2012 中引入了引數。添加此選項是為了避免使用變數和外部組態檔在包執行時傳遞引數。
如果 CSV 檔案目錄根據包環境而變化,這意味著引數最適合這種情況。不過,可以使用其他選項。
參考
- SSIS 引數與變數
uj5u.com熱心網友回復:
有幾種方法可用,每種方法都有優點和缺點。
利用引數包或專案級別是否適合在執行時需要定期更改的任何內容。因為這些可以通過腳本任務進行更改,然后可以在腳本結束時啟動包。這也意味著需要執行包的任何人都必須具有適當的安全級別和知識。
設定環境有利于靜態內容,例如連接字串或錯誤的電子郵件地址。可以設定一個主環境并讓其他檔案夾使用該環境,或者您需要為每個檔案夾設定它。缺點是部署包的人需要知道它們的使用方式以及它們是否在目錄檔案夾之外,而不是在 SQL Server 代理中進行映射需要額外的步驟。
我的首選方法是創建一個包含資訊的表,然后包第一步連接到表并將值加載到變數中。我已經在我目前的職位上實作了這一點,它已成為所有軟體包的標準。它允許默認某些內容,并且我們有 DEV、QA 和 Prod 表,以便在遷移包時填寫值。該表包含包名稱、變數名稱、變數值和審計列,以查看何時添加或更新的行。該表是臨時的,因此它會跟蹤所有更改。
包執行一個 SP,它旋轉行以回傳單行。樞軸是動態的,因此它會根據需要將列添加到結果集中。當一個值被標記為包名稱的默認值時,它會出現在所有包中,但如果相同的變數名稱列在包名稱下,它將顯示而不是默認值。例如,在測驗時,我可能希望將所有錯誤訊息發送到我的電子郵件而不是組收件箱。我將添加 My Package Name、Email_Alert、My Email Address 的記錄。然后,這將顯示為我用于測驗的電子郵件地址,在進行 QA 或 Prod 時,我不會將該記錄包含在其他表中,因此它使用默認收件箱。
使用該表還使我能夠擁有一個 SSRS 報告,該報告顯示用于每個包的變數,并且還允許我根據需要更改值,同時保留有關誰更改了哪些值以及何時更改的審計日志。當需要更改某些內容以進行回溯或其他任何事情時,這很有用,因為我可以使更改執行包,然后將值更改回來。如果部門曾經對任何事情進行審計,我有一個完整的審計跟蹤,我可以在幾分鐘而不是幾天內提供。還有一個已經實施的規則,不允許任何值被硬編碼到變數中,它們必須在表中。存盤程序名稱也保存在表中并傳遞給包,因此如果我們需要更新 SP,我們不需要重新部署包。
我們嘗試構建所有 SSIS 包,以便我們可以適應更改而無需重新部署,因為這是經常犯錯誤的時候。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438103.html
