我正在嘗試編寫從許多相同服務器收集數據到中央存儲庫的ETL。我想要做的是編寫一個包含源地址,用戶ID和密碼的包作爲參數,並對每個要複製的服務器執行一次包。使用連接屬性的SSIS 2012包參數
這是可行的嗎?我如何使用參數來創建源代碼?
我正在嘗試編寫從許多相同服務器收集數據到中央存儲庫的ETL。我想要做的是編寫一個包含源地址,用戶ID和密碼的包作爲參數,並對每個要複製的服務器執行一次包。使用連接屬性的SSIS 2012包參數
這是可行的嗎?我如何使用參數來創建源代碼?
我想問如何參數化連接管理器(甚至是一個真正的單詞?),而不是存儲連接參數的位置。答案很簡單:
您可以將參數存儲在表中。使用sql任務查詢表並將結果存儲在對象變量中。然後你可以在for循環中使用這個變量。在每次循環迭代期間,使用SSIS中的表達式來更改連接的值。
Severalbooks概述了這種方法。這是一個代碼example。
這裏有一些步驟 - 希望我沒有錯過任何東西。你提到一個服務器「地址」,但我不確定你正在嘗試做什麼。這個例子查詢多個sql服務器。
您可以使用字符串類型創建具有對象類型的變量SQL_RS,SRV_Conn。這持有我的服務器名稱。在執行SQL任務中,我有一個查詢,它返回我想查詢的sql服務器的名稱。然後設置以下屬性:
SELECT RTRIM(Server) AS servername
FROM ServerList_SSIS
WHERE (Server IS NOT NULL)
and coalesce(exclude,'0') <> 'True'
and IsOracle is Null
執行SQL任務>常規>的ResultSet = 「整個結果集,」
執行SQL任務>結果設置選項卡 「結果集名稱= 0」,變量名=「用戶:: SQL_RS「
因此,我們現在有一個SQL_RS變量中的服務器名稱列表。
的ForEach>收藏>枚舉= 「FOREACH ADO枚舉」
的ForEach>收藏>枚舉配置> ADO對象源變量=用戶:: SQL_RS
此映射SQL_RS的第一列反對SRV_Conn變量,因此循環的每次迭代都會在此變量中產生一個新值。
的ForEach>變量映射>變量=用戶:: SRV_Conn,指數= 0
給ForEach裏面有一些其他的SQL執行官,執行查詢的SQL數據庫,所以我需要改變我的「多服務」的服務器名稱連接。我有最初查詢的另一個連接,它讓我得到要查詢的服務器列表。使連接動態在連接屬性中完成 - 右鍵單擊連接>屬性。單擊表達式右側的省略號。
連接>屬性>表達式>物業=服務器,表達式= 「@ [用戶:: SRV_Conn]」
注:0爲變量的映射的索引值適用於本機OLEDB \ SQL服務器本機客戶端。如果您使用的是其他數據庫提供程序,則可能需要使用其他索引類型 - 這會使設置更加混亂。
OLEDB = 0,1
ADO.NET = @Varname
ADO = @Param1, Param2
ODBC = 1,2
全面上市here。
這實際上是我的問題 - 你如何在SSIS中更改連接的值?我的理解是,它不像創建連接,命令和讀者那麼簡單。 – Metaphor
將數據跨所有這些服務器相同結構的其餘部分
所有服務器的模式都是一樣的。 SSIS是2012. – Metaphor