2013-03-21 348 views
23

我有一個ssis包,其中我使用連接到SQL Server 2005表的OLEDB源。除日期列外的所有列都是NVARCHAR(255)。我正在使用Excel目標,並使用SQL語句在Excel工作簿中創建工作表,SQL位於Excel連接管理器(實際上是創建表格的語句),並且是通過映射來自D B。SSIS在Unicode和非Unicode錯誤之間進行轉換

不管我做了什麼,我總是得到這個unicode - >源和目標之間的非unicode轉換錯誤。嘗試轉換爲S> D之間的字符串[DT_STR],將其刪除,將SQL Table VARCHAR更改爲NVARCHAR並仍然出現此flippin錯誤。

因爲我創造了板材在Excel中使用SQL語句我沒有看到任何方式實際的前定義列的數據類型將在Excel工作表的內容。我想這將是一個默認的元數據,但我不知道。

因此,在我的SQL表目的地和用這個SSIS sql語句創建我的Excel工作表之間,我該如何阻止這個錯誤呢?

我的錯誤是:

錯誤在數據流任務[OLE DB源[1]:列 「MyColumn」 不能Unicode和非Unicode字符串數據類型之間的轉換。

而對於所有nvarchar列。

感謝所有幫助

感謝

安德魯

+5

你需要使用'數據Conversion'非unicode'轉換''到因爲unicode' Excel識別刪除SSIS包的轉換部分只有'unicode'數據 – praveen

+0

,刪除的目的和excel連接,包括刪除工作簿中由SQL創建的工作表並重新啓動。現在它加載好與上erros – Andrew

+0

正如我所說的現在取消轉換工作正常。從我所瞭解的SQL數據列類型是NVARCHAR是unicode類型,因此不需要轉換。 – Andrew

回答

42

添加數據轉換轉換爲字符串列從非Unicode(DT_STR)轉換爲Unicode(DT_WSTR)字符串。

你需要做的這對所有的字符串列...

+17

工程,但應該有一個「腕管隧道」警告/聲明附加到答案。 –

+2

biml在這種情況下會很方便@ pokerplayer23 – gazma

10
  1. 首先,添加一個數據轉換模塊到您的數據流圖。

  2. 打開數據轉換塊並勾選出現錯誤的列。下面將其數據類型更改爲unicode字符串(DT_WSTR)或任何數據類型預期並保存。

  3. 轉到目標塊。轉到在其中映射,並將新創建的元素映射到其相應的地址並保存。

  4. 在solution explorer.select屬性中右鍵單擊您的項目。選擇配置屬性並在其中選擇調試。在這裏,將Run64BitRunTime選項設置爲false(因爲excel不能很好地處理64位應用程序)。

16

下面的步驟爲我工作:

1)。右鍵單擊源任務。 2)。點擊「顯示高級編輯器」。 advanced edit option for source task in ssis

3)。轉到「輸入和輸出屬性」選項卡。 4)。選擇您遇到錯誤的輸出列。 5)。其數據類型將是「String [DT_STR]」。 6)。將該數據類型更改爲「Unicode字符串[DT_WSTR]」。 Changing the data type to unicode string

7)。保存並關閉。 希望這有助於!

1

在上述示例中,我一直在丟失值,我認爲推遲驗證將允許將新數據類型保存爲元數據的一部分。

在「Excel連接管理器」的連接管理器上,將屬性中的延遲驗證設置爲False。

然後在數據流Excel的目標任務將ValidationExternalMetaData設置爲False,再次從屬性中。

現在,您可以右鍵單擊Excel目標任務,然後轉到Excel目錄的高級編輯器 - >最右側選項卡 - 輸入和輸出屬性。在「外部列」文件夾部分中,您現在可以更改有問題列的數據類型和長度值,現在可以保存該值。

祝你好運!

0

我一直有同樣的問題,並試圖在這裏寫的一切,但它仍然給我同樣的錯誤。 我試圖轉換的列中顯示爲NULL值。

刪除NULL值解決了我的問題。

乾杯, 艾哈邁德

0

我經歷過這樣的情況,當我已經安裝了Oracle版本連接到Windows上運行Oracle 12個服務器12客戶機32位客戶端。 儘管Oracle-source和SqlServer-destination都不是Unicode,我仍然收到這條消息,就好像oracle列是Unicode一樣。 我解決了插入數據轉換框的問題,並且 爲varchar2字段選擇了類型DT-STR(非unicode),爲數字字段選擇了DT-WSTR(unicode),然後我從輸出字段中刪除了「COPY OF」名稱。 請注意,我不斷收到錯誤信息,因爲我已將源框箭頭連接到轉換框,然後設置轉換類型。所以我不得不切換源代碼框,並清除了目標框中的所有錯誤。

0

而不是添加早先建議的數據轉換您可以將nvarchar列轉換爲varchar列。這樣可以防止您進行不必要的步驟,並且可以獲得更高的性能。

在選擇你的SQL語句時,把date替換成CAST(date AS varchar([size]))。出於某種原因,這還沒有改變輸出數據類型。要做到這一點做到以下幾點:

  1. 右鍵點擊你的OLE DB源一步,打開高級編輯。
  2. 轉到輸出輸入特性
  3. 選擇輸出列
  4. 選擇列
  5. 根據數據類型屬性改變數據類型爲字符串[DT_STR]
  6. 改變長度,以你在CAST指定的長度聲明

做完這些之後,您的源數據將作爲varchar輸出,並且您的錯誤將消失。

Source

0

這裏的缺少的部分是Data Conversion對象。它應該位於OLE DB Source和Destination對象之間。

enter image description here

相關問題