SSI在Unicode和非Unicode之间转换错误
我有一个ssis包,其中我使用一个OLEDB源链接到SQLServer2005表。除日期列外,所有列均为NVARCHAR(255)。我使用Excel目标并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器中(实际上是创建工作表的create table语句),并从DB中的列映射中派生 无论我做了什么,我都会在源和目标之间不断出现此unicode-->非unicode转换错误。尝试在S>D之间转换为字符串[DT_STR],将其删除,将SQL表VARCHAR更改为NVARCHAR,但仍会出错 因为我是用SQL语句在Excel中创建工作表的,所以我看不到任何方法可以在Excel工作表中预先定义列的数据类型。我想这将是一个默认的元数据,但我不知道 因此,在我的SQL表目标和使用此SSIS SQL语句创建Excel表之间,如何才能阻止出现此错误 我的错误是: 数据流任务[OLE DB Source[1]]出错:“MyColumn”列无法在unicode和非unicode字符串数据类型之间转换 和所有nvarchar列 谢谢你的帮助 谢谢SSI在Unicode和非Unicode之间转换错误,unicode,ssis,non-unicode,Unicode,Ssis,Non Unicode,我有一个ssis包,其中我使用一个OLEDB源链接到SQLServer2005表。除日期列外,所有列均为NVARCHAR(255)。我使用Excel目标并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器中(实际上是创建工作表的create table语句),并从DB中的列映射中派生 无论我做了什么,我都会在源和目标之间不断出现此unicode-->非unicode转换错误。尝试在S>D之间转换为字符串[DT_STR],将其删除,将SQL表VARCHAR更改为NVARC
Andrew添加数据转换,以将字符串列从非Unicode(DT_STR)转换为Unicode(DT_WSTR)字符串 您需要对所有字符串列执行此操作
以下步骤对我有效: 1) 。右键单击源任务 2) 。点击“显示高级编辑器”。 3) 。转到“输入和输出属性”选项卡 4) 。选择要获取错误的输出列 5) 。其数据类型将为“String[DT_STR]” 6) 。将该数据类型更改为“Unicode字符串[DT_WSTR]”。 7) 。保存并关闭。
希望这有帮助 在上面的示例中,我一直在丢失值,我认为延迟验证将允许将新数据类型保存为元数据的一部分 在“Excel连接管理器”的连接管理器上,从属性中将延迟验证设置为False 然后,在Excel的数据流目标任务上,再次从属性中将ValidationExternalMetaData设置为False 现在,您可以右键单击Excel目标任务,进入Excel目标高级编辑器-->最右侧选项卡-输入和输出属性。在ExternalColumns文件夹部分,您现在可以更改有问题列的数据类型和长度值,现在可以保存这些数据
祝你好运 我也遇到了同样的问题,尝试了这里写的所有东西,但它仍然给了我同样的错误。 结果是我试图转换的列中的空值 删除空值解决了我的问题 干杯,
Ahmed我在安装Oracle 12版客户端32位客户端时遇到这种情况,该客户端连接到运行在windows上的Oracle 12服务器。 尽管Oracle源和SqlServer目标都不是Unicode,但我一直收到这条消息,就好像Oracle列是Unicode一样。 我解决了插入数据转换框的问题 为varchar2字段选择DT-STR(不是unicode)类型,为数字字段选择DT-WSTR(unicode),然后我从输出字段名中删除了“的副本”。
请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接。因此,我必须切换源框,这清除了目标框中的所有错误。您可以将nvarchar列强制转换为varchar列,而不是添加先前建议的数据转换。这可以防止您执行不必要的步骤,并具有比备选方案更高的性能 在SQL语句的select中,将
date
替换为CAST(日期为varchar([size]))
。由于某些原因,这还不会更改输出数据类型。要执行此操作,请执行以下操作:
这里缺少的部分是
数据转换
对象。它应该位于OLE DB源对象和目标对象之间
在SQL Server中创建表时,将表列
NVARCHAR
改为VARCHAR似乎没有人提到这一点,但是,在源查询中将varchar转换为nvarchar也解决了这个问题。您需要使用数据转换将非unicode
转换为unicode
,因为excel只识别unicode
数据删除了SSIS包的转换部分,删除了目标和excel连接,包括删除工作簿中SQL创建的工作表并重新开始。现在它可以加载了,就像我说的那样,移除转换可以工作