我有一个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 回答
添加数据转换转换以将字符串列从非Unicode(DT_STR)转换为Unicode(DT_WSTR)字符串 .
您需要为所有字符串列执行此操作...
以下步骤对我有用:
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) . 保存并关闭 . 希望这可以帮助!
首先,将数据转换块添加到数据流图中 .
打开数据转换块并勾选显示错误的列 . 下面将其数据类型更改为unicode字符串(DT_WSTR)或预期的任何数据类型并保存 .
转到目标块 . 转到其中的映射并将新创建的元素映射到其对应的地址并保存 .
在解决方案explorer.select属性中右键单击您的项目 . 选择配置属性并在其中选择调试 . 在这里,将Run64BitRunTime选项设置为false(因为excel不能很好地处理64位应用程序) .
缺少的部分是
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' . 请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接起来 . 所以我不得不切换源盒,这清理了目标框中的所有错误 .
您可以将nvarchar列转换为varchar列,而不是添加先前建议的数据转换 . 这可以防止您进行不必要的步骤,并且具有比替代方案更高的性能 .
在选择SQL语句时,将
date
替换为CAST(date AS varchar([size]))
. 由于某种原因,这还没有改变输出数据类型 . 为此,请执行以下操作:右键单击“OLE DB源”步骤,然后打开高级编辑器 .
转到输入和输出属性
选择输出列
选择您的专栏
在数据类型属性下,将DataType更改为字符串[DT_STR]
将长度更改为您在CAST语句中指定的长度
执行此操作后,您的源数据将作为varchar输出,您的错误将消失 .
Source
在上面的示例中,我一直在丢失值,我认为延迟验证将允许将新数据类型保存为元数据的一部分 .
在“Excel连接管理器”的连接管理器上,从“属性”中将“延迟验证”设置为“假” .
然后在Excel的数据流目标任务上再次从属性中将ValidationExternalMetaData设置为False .
现在,您可以右键单击Excel目标任务,然后转到Excel目标的高级编辑器 - >最右侧选项卡 - 输入和输出属性 . 在“外部列”文件夹部分中,您现在可以更改有问题列的“数据类型”和“长度”值,现在可以保存这些值 .
祝好运!
我一直有同样的问题,并尝试了写在这里的一切但是它仍然给我同样的错误 . 原来是我试图转换的列中的NULL值 .
删除NULL值解决了我的问题 .
干杯,艾哈迈德