2013-07-10 77 views
1

我只能在OLE DB源中找到使用臨時表的解決方案。 但我找不到ADO.NET源代碼的解決方案。如何在SSIS包中的ADo.NET源代碼中成功使用臨時表?SSIS中的臨時表ado.net源碼

回答

3

我發現SSIS中的臨時表的工作比他們通常的價值更痛苦。我希望你的體驗更好。

創建一個ADO.NET連接。在連接管理器的屬性中,將RetainSameConnection的值從false設置爲true。這將允許通過防止連接池交換線程而使創建的臨時表在存在包執行期間存在。

我的問題從正確獲取元數據的設置中延伸出來。爲了解決這個問題,我創建了一個變量,QuerySource,它查詢一張反映臨時表的外觀的物理表。 SELECT S.src_id, S.src_value FROM dbo.SRC AS S;這允許數據流爲下游組件建立正確的元數據。我在ADO.NET源代碼中手動使用此查詢。完成後,我需要更改查詢以使用臨時表##SRC。與OLE DB源組件不同,您不能在數據流任務中設置此屬性。

數據流工作完成後,回到控制流中,查看Data Flow Task的屬性。將延遲驗證從false更改爲true。這將阻止任何設計時間驗證發生,一旦我們刪除非臨時表「腳手架」就需要進行驗證。接下來找到表達式並單擊省略號(...)。在下拉列表中,您應該看到ADO.NET源的名稱。我已經重新命名了,所以我在下拉列表中看到[ADONET Src]。[TableOrViewName]和[ADONET Src]。[SqlCommand]。我選擇了[ADONET Src]。[SqlCommand]和我的價值,我使用了@[User::SrcQuery]

我運行包以確保它仍然有效。它做了。然後,我改變了我的查詢的值爲SELECT S.src_id, S.src_value FROM ##SRC AS S;我reran,這次它正確地從我的臨時表中拉出數據。

如果您使用SQL Server 2012作爲源代碼,那麼可以使用EXECUTE語句的WITH RESULT SETS選項明確描述臨時表元數據,從而使自己更容易。

+0

+1 !!在這一天工作了一整天。 '...查看數據流任務的屬性。將延遲驗證從false更改爲true。「這正是讓我感到困擾的原因。繁榮,現在它工作。 –