SSIS在Unicode和非Unicode错误之间转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS在Unicode和非Unicode错误之间转换相关的知识,希望对你有一定的参考价值。
我有一个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列。
感谢任何帮助
谢谢
安德鲁
添加数据转换转换以将字符串列从非Unicode(DT_STR)转换为Unicode(DT_WSTR)字符串。
您需要为所有字符串列执行此操作...
以下步骤对我有用:
1)。右键单击源任务。
2)。单击“显示高级编辑器”。 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)。保存并关闭。希望这可以帮助!
- 首先,将数据转换块添加到数据流图中。
- 打开数据转换块并勾选显示错误的列。下面将其数据类型更改为unicode字符串(DT_WSTR)或预期的任何数据类型并保存。
- 转到目标区块。转到其中的映射并将新创建的元素映射到其对应的地址并保存。
- 在解决方案explorer.select属性中右键单击您的项目。选择配置属性并在其中选择调试。在这里,将Run64BitRunTime选项设置为false(因为excel不能很好地处理64位应用程序)。
您可以将nvarchar列转换为varchar列,而不是添加先前建议的数据转换。这可以防止您进行不必要的步骤,并且具有比替代方案更高的性能。
在选择您的SQL语句时,用date
替换CAST(date AS varchar([size]))
。由于某种原因,这还没有改变输出数据类型。为此,请执行以下操作:
- 右键单击“OLE DB源”步骤,然后打开高级编辑器。
- 转到输入和输出属性
- 选择输出列
- 选择你的专栏
- 在“数据类型属性”下,将DataType更改为字符串[DT_STR]
- 将长度更改为您在CAST语句中指定的长度
执行此操作后,您的源数据将作为varchar输出,您的错误将消失。
缺少的部分是Data Conversion
对象。它应该位于OLE DB Source和Destination对象之间。
当我安装Oracle版本12客户端32位客户端连接到运行在Windows上的Oracle 12 Server时,我遇到了这种情况。尽管Oracle-source和SqlServer-destination都不是Unicode,但我仍然收到此消息,就像oracle列是Unicode一样。我解决了插入数据转换盒的问题,为varchar2字段选择了DT-STR(不是unicode),为数字字段选择了DT-WSTR(unicode),然后我从输出字段名中删除了'COPY OF'。请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接起来。所以我不得不切换源框,这清理了目标框中的所有错误。
在上面的例子中,我一直在丢失值,我认为延迟验证将允许将新数据类型保存为元数据的一部分。
在“Excel连接管理器”的连接管理器上,从“属性”中将“延迟验证”设置为“假”。
然后在Excel的数据流目标任务上再次从属性中将ValidationExternalMetaData设置为False。
现在,您可以右键单击Excel目标任务,然后转到Excel目标的高级编辑器 - >最右侧选项卡 - 输入和输出属性。在“外部列”文件夹部分中,您现在可以更改有问题列的“数据类型”和“长度”值,现在可以保存这些值。
祝好运!
我一直有同样的问题,并尝试了所有写在这里,但它仍然给了我同样的错误。原来是我试图转换的列中的NULL值。
删除NULL值解决了我的问题。
什拉,艾哈迈德
以上是关于SSIS在Unicode和非Unicode错误之间转换的主要内容,如果未能解决你的问题,请参考以下文章