首页 文章

SSIS在Unicode和非Unicode错误之间转换

提问于
浏览
37

我有一个ssis包,我使用连接到SQL Server 2005表的OLEDB源 . 除日期列之外的所有列都是NVARCHAR(255) . 我正在使用Excel目标并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器(实际上是创建工作表的创建表语句)中,并且是从列的映射派生而来的 . D B .

无论我做了什么,我都会在源和目标之间获得这个unicode - >非unicode转换错误 . 尝试在S> D之间转换为字符串[DT_STR],删除它,将SQL表VARCHAR更改为NVARCHAR并仍然得到此flippin错误 .

因为我使用SQL语句在Excel中创建工作表,所以我没有看到任何方法来实际预定义Excel工作表中列的数据类型 . 我想这将是一个默认的元数据,但我不知道 .

因此,在我的SQL表目的地和使用此SSIS sql语句创建Excel表之间如何才能阻止此错误出现?

我的错误是:

数据流任务错误[OLE DB源[1]]:列“MyColumn”无法在unicode和非unicode字符串数据类型之间进行转换 .

对于所有nvarchar列 .

感谢任何帮助

谢谢

安德鲁

8 回答

  • 3

    添加数据转换转换以将字符串列从非Unicode(DT_STR)转换为Unicode(DT_WSTR)字符串 .

    您需要为所有字符串列执行此操作...

  • 53

    以下步骤对我有用:

    1) . 右键单击源任务 .

    2) . 点击"Show Advanced editor" . advanced edit option for source task in ssis

    3) . 转到“输入和输出属性”选项卡 .

    4) . 选择要获取错误的输出列 .

    5) . 其数据类型为“String [DT_STR]” .

    6) . 将该数据类型更改为"Unicode String[DT_WSTR]" . Changing the data type to unicode string

    7) . 保存并关闭 . 希望这可以帮助!

  • 1
    • 首先,将数据转换块添加到数据流图中 .

    • 打开数据转换块并勾选显示错误的列 . 下面将其数据类型更改为unicode字符串(DT_WSTR)或预期的任何数据类型并保存 .

    • 转到目标块 . 转到其中的映射并将新创建的元素映射到其对应的地址并保存 .

    • 在解决方案explorer.select属性中右键单击您的项目 . 选择配置属性并在其中选择调试 . 在这里,将Run64BitRunTime选项设置为false(因为excel不能很好地处理64位应用程序) .

  • 36

    缺少的部分是 Data Conversion 对象 . 它应该位于OLE DB Source和Destination对象之间 .

    enter image description here

  • 12

    当我安装Oracle版本12客户端32位客户端连接到运行在Windows上的Oracle 12 Server时,我遇到了这种情况 . 虽然Oracle-source和SqlServer-destination都不是Unicode,但我仍然收到此消息,就像oracle列是Unicode一样 . 我解决了插入数据转换盒的问题,为varchar2字段选择了DT-STR(不是unicode),为数字字段选择了DT-WSTR(unicode),然后我从输出字段名中删除了'COPY OF' . 请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接起来 . 所以我不得不切换源盒,这清理了目标框中的所有错误 .

  • 4

    您可以将nvarchar列转换为varchar列,而不是添加先前建议的数据转换 . 这可以防止您进行不必要的步骤,并且具有比替代方案更高的性能 .

    在选择SQL语句时,将 date 替换为 CAST(date AS varchar([size])) . 由于某种原因,这还没有改变输出数据类型 . 为此,请执行以下操作:

    • 右键单击“OLE DB源”步骤,然后打开高级编辑器 .

    • 转到输入和输出属性

    • 选择输出列

    • 选择您的专栏

    • 在数据类型属性下,将DataType更改为字符串[DT_STR]

    • 将长度更改为您在CAST语句中指定的长度

    执行此操作后,您的源数据将作为varchar输出,您的错误将消失 .

    Source

  • 3

    在上面的示例中,我一直在丢失值,我认为延迟验证将允许将新数据类型保存为元数据的一部分 .

    在“Excel连接管理器”的连接管理器上,从“属性”中将“延迟验证”设置为“假” .

    然后在Excel的数据流目标任务上再次从属性中将ValidationExternalMetaData设置为False .

    现在,您可以右键单击Excel目标任务,然后转到Excel目标的高级编辑器 - >最右侧选项卡 - 输入和输出属性 . 在“外部列”文件夹部分中,您现在可以更改有问题列的“数据类型”和“长度”值,现在可以保存这些值 .

    祝好运!

  • 2

    我一直有同样的问题,并尝试了写在这里的一切但是它仍然给我同样的错误 . 原来是我试图转换的列中的NULL值 .

    删除NULL值解决了我的问题 .

    干杯,艾哈迈德

相关问题