2014-01-14 73 views
6

我有一個SSIS包,在他的OLEDB目標有一個NVARCHAR(MAX)字段。該字段甚至沒有被數據流填滿。數據流任務失敗,錯誤爲「無法創建OLE DB訪問器,請驗證列元數據是否有效」。SSIS:無法創建OLE DB訪問器。驗證列元數據是有效的

我看到了類似的問題:How do I fix the multiple-step OLE DB operation errors in SSIS?,並檢查了我的元數據緩慢它的建議。我發現SSIS將違規列映射爲NTEXT而不是DT_WSTR。我試着將它的類型改爲長度爲8000的DT_WSTR,但仍然得到相同的錯誤。還嘗試用NULL填充該字段,同樣的錯誤。將「驗證外部元數據」設置爲false並沒有什麼區別。任何關於如何修復它的建議?

謝謝。

+0

您將哪個數據類型源傳遞到該目標列。 – Kishore

+3

非常令人反感的錯誤。如果我沒有記錯,我必須強制刷新每個源/轉換的元數據才能使其正常工作。強制刷新源意味着:選擇其他表,保存,再次選擇舊錶,保存。 – OzrenTkalcecKrznaric

+0

@Kishore沒有資料來源,目標中的違規列沒有資料來源:-( – Oscar

回答

1

只是爲了記錄,我結束了使用.Net目的地,這個錯誤沒有發生。

4

我發現另一種(可能更快)的方式來解決這個問題,但它有點尷尬。警告說你的數據可能會被截斷。使用它的好主意取決於數據的用途。

假設有問題的列輸出設置爲Unicode text stream [DT_NTEXT]。在第一個數據轉換步驟之後添加第二個數據轉換步驟,將第一個轉換的輸出放入第二個數據轉換步驟,您可以將Unicode text stream [DT_NTEXT]映射到Unicode string [DT_WSTR](長度= 4000)。它會警告你截斷的可能性,但現在你可以使用第二次轉換的輸出數據。

+0

謝謝,如果截斷是一個選項,這不是一個壞主意,我只是回答了我自己的問題,只是忘記了我自己解決問題的時間,謝謝。 – Oscar

0

我在ACCESS數據庫中有同樣的問題,所以我使用了派生列,並且創建了所有必需的字段(DT_STR,<>,<>)(長度是表列的大小和代碼頁是1252)。這不僅在ACCESS中起作用,而且還爲EXCEL源代碼工作。

希望這會有所幫助。

0

我最終通過使用.NET目標,但真正的問題是,目標表列已過時

嘗試刷新它們,方法是將目標更改爲另一個表,然後更改爲上一個,或直接刪除該操作,然後再將其添加回正確的映射。

1

我有類似的問題。我有一個從NVARCHAR(MAX)更改爲NVARCHAR(4000)的SQL字段,但給了我與您描述的相同的錯誤。難以置信的令人沮喪。我能夠通過在OLE DB目標中取消映射錯誤地將該字段列爲NTEXT的列來修復它。然後,通過OLE DB目標之前的每個SSIS操作並選擇顯示高級編輯器...然後單擊刷新。在完成之前的每一步之後,我重新映射了列,SSIS終於找到了該列現在是DT_WSTR。