我有一个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)。保存并关闭。希望这可以帮助!
您可以将nvarchar列转换为varchar列,而不是添加先前建议的数据转换。这可以防止您进行不必要的步骤,并且具有比替代方案更高的性能。
在选择您的SQL语句时,用date
替换CAST(date AS varchar([size]))
。由于某种原因,这还没有改变输出数据类型。为此,请执行以下操作:
执行此操作后,您的源数据将作为varchar输出,您的错误将消失。
当我安装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值解决了我的问题。
什拉,艾哈迈德