2011-10-26 147 views
5

中途通過SSIS項目特定表字段從​​改爲nvarchar(30)SSIS掌握OLEDB連接

然而,在運行SSIS包時,一個錯誤,說明cannot convert from unicode to non-unicode出現錯誤的列類型。 我想直接從數據庫源傳輸數據到目的地。

這兩個連接都使用相同的數據庫模式,因此不應該進行轉換。

當檢查外部列數據類型時,它顯示D_STR,這不再是這種情況。

我試圖刪除源和目的地,希望它會清理任何類型的緩存數據,但它沒有奏效。

任何想法?

回答

16

聽起來像我的數據流任務中的元數據緩存,需要刷新,以反映新的類型。

打開源代碼,轉到列,取消選中列,然後選中列。點擊確定。元數據現在應刷新。

+0

就是這樣。我無法找到重置流中緩存的元數據的方法,但這樣做的確有用。儘管如此,必須這樣做是相當糟糕的,因爲必須重新創建目標中的映射:S – cfrag

+1

將每列視爲數據流經的管道。在設計時,你告訴ssis你需要一個能夠讓30個字節流過的管道。然後,在運行時,您嘗試通過30字節管道填充60個字節。通過取消選中列,然後重新檢查,您強制ssis查看數據並用60字節管替換30。 – brian

+3

我瞭解元數據的需求。我不明白的是缺少「刷新列元數據」按鈕來強制「調整大小」。相反,人們必須重做整個管道。 – cfrag

1

nvarchar和nchar是unicode。相反,varchar和char是非Unicode的。

http://msdn.microsoft.com/en-us/library/ms187752.aspx

由於如果從一個數據類型的數據移動到另一個,你將不得不執行一些額外的轉換(CAST或CONVERT)的結果。另一種選擇是看你的適配器,使得焦炭將使用DT-STR的SSIS數據類型和nvarchar將使用SSIS數據類型DT-WSTR

http://msdn.microsoft.com/en-us/library/ms141036.aspx

不知道你的包是如何工作的,我不能更具體但希望這會讓你走。

+0

我沒有轉換數據。該包是一個簡單的「從表A轉移到表B」,兩個表上的列完全相同。發生了什麼事情是,在某個時間點,兩個表都改變了這個特定的列,但SSIS似乎沒有注意到它 – cfrag