将非 Unicode 字符串转换为 Unicode 字符串 SSIS

Jua*_*lez 9 ssis type-conversion

我正在创建一个包,我将在其中将数据从数据库导出到一个空的 excel 文件中。当我只添加源和目标组件并运行包时,我收到一个转换错误,指出输出列和列“A”无法在 unicode 和非 unicode 字符串数据类型之间转换。

为了解决这个问题,我添加了一个数据转换组件并将所有列转换为

“Unicode 字符串 [DT_WSTR]”

我不再收到错误。唯一的问题是我有大约 50 列,我必须在其中 1 x 1 并从下拉列表中选择“Unicode 字符串 [DT_WSTR]”。然后我必须进入目标组件并将新转换的列映射到我的 excel 文件。

我的问题是,如果其他人遇到过这种情况,是否有更好更有效的方法来避免必须进行所有手动数据类型转换?必须一一转换和映射所有列似乎不切实际,尤其是当您有大量行时。

我知道 excel 文件不是导入和导出数据的最佳方式,但这是在这种特殊情况下所需要的。

我可能会寻找一种仅导出到纯文本文件的方法,然后尝试将其转换为 excel 作为包中的最后一步。我希望这不会触发相同的 unicode/nonunicode 转换错误。

bil*_*nkc 16

作为 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
Run Code Online (Sandbox Code Playgroud)

使用查询,例如

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
Run Code Online (Sandbox Code Playgroud)

AdventureWorks 的精明学生会认识到数据已经是一种n(var)char类型,但这仅仅是为了演示这个概念。

好处

  • 使用的内存较少。目前,您将使用Data Conversion ComponentSSIS 中的分配和存储“相同”数据的两个副本
  • 没有RSI。无需单击 N 次并在他们提供的可怕的小编辑器中指定所有信息。我将使用针对 dmv/information_schema 的查询来进一步自动生成“Excel 就绪”表导出。
  • 没有自定义组件安装。我曾在禁止安装开源的地方工作过。安装第三方应用程序还需要延迟维护成本,因为现在“每个人”都需要安装相同的应用程序来维护您的代码并且需要将其安装在服务器上,并且信息安全需要仔细检查程序集以确保它们有效我们需要签核从bajillion人谁级别高于你...


Kin*_*hah 5

在本地,没有办法做到这一点。但是您可以从 Codeplex下载 - Replaces Data Conversion Component for SSIS并一次性完成。

更多信息可以在这里找到。