2011-08-16 43 views
2

我在寫一個從一個數據庫到另一個數據庫的基本文件轉儲。我正在使用SSIS 2008並創建了幾個包來將我從MSSQL 2010數據庫中的數據轉換爲MYSQL 5.1數據庫。在SSIS包中使用臨時表

所有的連接都已建立,並且記錄可以在兩個數據庫之間傳輸,但是我希望在轉換過程中使用臨時表,並使用臨時表作爲數據流任務中的MSSQL源來將表中的錶轉儲等待MYSQL表。

我一直在設置這個問題。我正在使用OLEDB連接並將RetainSameConnection屬性以及DelayValidation屬性設置爲true。將源圖設置爲MSSQL數據庫的源時,我無法從控制流中找到在先前任務中創建的臨時表。我爲這兩個任務使用相同的連接管理器。

任何人有任何想法或經驗呢?

舉一個簡單的例子一個任務做..

SELECT * 
INTO #TMP 
FROM CUSTOMERS 

(這是一個簡單的例子,我在這種情況下relize我可以只使用客戶表如此忍受我) 是否有可能使用這個臨時表在數據流操作中作爲源表?

+1

由於SSIS試圖在您設置的任務和數據流中綁定模式,因此SSIS特別關注使用臨時表。如果有解決方案,我還沒有找到。我們使用SSIS模式來保存臨時表等,以解決這個問題。 – Yuck

+0

您可以添加一個解決方案,放縱這項工作的細節嗎? – JBone

回答

1

正如我在我的評論中提到的,沒有太多的解決方案和更多的解決方法。 SSIS使用結果集的形狀來綁定任務中的屬性。由於臨時表在數據庫中並不總是可用,即使您將DelayValidation設置爲true,也可能導致SSIS中的錯誤。

我的解決方案是在您要連接的任何數據庫中創建一個SSIS模式。這樣做的原因是安全和明確分離僅用於SSIS包內的對象 - 主要是臨時表。

而不是在dbo模式中投擲表格(您不應該對您感到羞恥),您可以在SSIS模式中創建它們。典型的數據流會在表開始時截斷表,加載值並執行所需的任何操作,並可以在完成時截斷它。只要表格始終可用,SSIS就可以檢查結果集的形狀。

+0

+1良好的ETL實踐來展示數據。 – HardCode

0

您不應該使用臨時表作爲源,因爲它不會識別select的列。改用表格變量或CTE。

+0

如果聲明瞭表變量或CTE,它將顯示爲可供選擇的表格? – JBone

+0

@JBone,沒有加入它的選擇將SSIS認爲是源數據。 – HLGEM