2012-11-21 89 views
0

我有一個簡單的DataFlow與兩個對象的源是一個MDB文件和目標是MSSQL數據庫。從訪問MSSQL的SSIS DataFlow

想法是將數據從一個遷移到另一個。

問題是,數據是從Access查詢中提取的,而一列中有1000個字符,並且在高級屬性中的SSIS中,外部列的默認長度是255,所以當我執行任務時它會嘗試截斷它。要禁用truncate上的throw錯誤不是一個選項,並且修改外部列的長度無法完成,它會拋出錯誤並導致元數據錯誤。

首先,任何人都可以解釋爲什麼?

其次,我需要一個解決方案,我需要它很快,因爲它有點讓我發瘋。

回答

0

Access支持與MSSQL中的視圖等效的查詢。 列大小不是通過查看一些結果而是通過列數據類型的默認列長度來定義的。

我創建了另一個具有所需數據類型的表,並且在數據流之前,我已經將數據流放入包2 SQL腳本中:一個用於刪除表中的所有數據,另一個用於對錶執行查詢,至於把它當作臨時表。

然後對這個僞臨時表執行實際的數據流。

這解決了我的問題。

0

出現這種問題,因爲ssis任務通過檢查前100行(afaik)來「猜測」列的長度。因此,如果從1到100的所有行的長度爲10,而行101的第11個爲第11個,則任務將失敗,因爲長度被「猜到」爲10.

修改會拋出錯誤,因爲您有validateExternalMetadata設置爲true。要解決此問題,請轉至導入任務的advanced options(訪問權限)並將值設置爲false。 這意味着,該任務將接受您輸入的未經檢查的修改值。

+0

這個問題是,我已經嘗試過,所以第一行將有更多的謝謝x字符,並且的確如預期的那樣,但是當我真正看數據/嘗試導入它拋出的數據時它在我的臉上......數據將被截斷bla bla bla – GxG

+0

可能你的數據包含你設置爲分隔符的值嗎?這會解釋你的問題。 – stb

+1

我解決了這個問題。我創建了一個臨時表來存儲給定列的特定長度的結果......並且它工作......數據本身有一堆空格分隔的字符。查詢的元數據僅獲取每列的返回類型的默認值。使用臨時表解決了這個限制... – GxG

0

您是否嘗試過SSIS導入導出嚮導從BI開發環境中導入數據?這是MsAccess最簡單的方法,因爲這不僅會導入數據,還會保存包。如果您在導入過程中遇到錯誤(使用嚮導),請將其發佈,因爲這有助於進一步調查。另外,正如@stb建議的,嘗試將第一條記錄超過1000個字符。

+0

這不是一個選項,因爲這需要自動化。 – GxG

+0

我想知道您是否可以先嚐試這種方式,看看是否有任何問題?如上所述,它也將它作爲一個包保存下來,所以這也可以用來自動化它。 – user1826905