Ssis

將非 Unicode 字元串轉換為 Unicode 字元串 SSIS

  • August 23, 2018

我正在創建一個包,我將在其中將數據庫中的數據導出到一個空的 excel 文件中。當我只添加源組件和目標組件並執行包時,我收到一個轉換錯誤,指出輸出列和列“A”無法在 unicode 和非 unicode 字元串數據類型之間轉換。

為了解決這個問題,我添加了一個數據轉換組件並將所有列轉換為

“Unicode 字元串

$$ DT_WSTR $$” 我不再收到錯誤。唯一的問題是我有大約 50 列,我必須一個一個地去選擇“Unicode 字元串

$$ DT_WSTR $$" 從下拉列表中。然後我必須進入目標組件並將新轉換的列映射到我的 excel 文件。 我的問題是,如果其他人遇到過這種情況,是否有更好更有效的方法來避免必須進行所有手動數據類型轉換?必須一一轉換和映射所有列似乎並不實際,尤其是在您有大量行的情況下。

我知道 excel 文件不是導入和導出數據的最佳方式,但它是這種特殊情況下所需要的。

我可能會尋找一種僅導出到平面文本文件的方法,然後嘗試將其轉換為 excel 作為包中的最後一步。我希望這不會觸發相同的 unicode / nonunicode 轉換錯誤。

作為 RDC 的替代方案,我將跳過轉換 SSIS 中的數據類型,並在我的源查詢中將它們顯式轉換為 nvarchar。

用法

在您的源查詢中(並且您正在使用源查詢而不是簡單地選擇下拉列表中的表),明確地將事物轉換為適當的 n(var)char 長度。

代替

SELECT
   E.BusinessEntityID
,   E.NationalIDNumber
,   E.LoginID
,   E.JobTitle
,   E.BirthDate
,   E.MaritalStatus
,   E.Gender
FROM
   HumanResources.Employee AS E

使用查詢,例如

SELECT
   CAST(E.BusinessEntityID AS nvarchar(10)) AS BusinessEntityID
,   CAST(E.NationalIDNumber AS nvarchar(15)) AS NationalIDNumber
,   CAST(E.LoginID AS nvarchar(256)) AS LoginID
,   CAST(E.JobTitle AS nvarchar(50)) AS JobTitle
,   CAST(E.BirthDate AS nvarchar(10)) AS BirthDate
,   CAST(E.MaritalStatus AS nchar(1)) AS MaritalStatus
,   CAST(E.Gender AS nchar(1)) AS Gender
FROM
   HumanResources.Employee AS E

AdventureWorks 的精明學生會認識到數據已經是一種n(var)char類型,但這只是為了展示這個概念。

好處

  • 使用的記憶體更少。目前,您將使用Data Conversion Componentin SSIS分配和儲存“相同”數據的兩個副本
  • 沒有RSI。無需點擊 N 次並在他們提供的糟糕的小編輯器中指定所有這些資訊。我將使用針對 dmv/information_schema 的查詢來進一步自動生成“Excel 就緒”表導出。
  • 沒有自定義組件安裝。我曾在安裝開源被禁止的地方工作過。安裝第三方應用程序還需要延遲維護成本,因為現在“每個人”都需要安裝相同的應用程序來維護您的程式碼*,並且它需要安裝在伺服器上,並且infosec 需要仔細檢查程序集以確保它們是有效的我們需要比你高的*無數人的簽字…

引用自:https://dba.stackexchange.com/questions/41608