2013-03-21 333 views
23

我有一个ssis包,其中我使用连接到SQL Server 2005表的OLEDB源。除日期列外的所有列都是NVARCHAR(255)。我正在使用Excel目标,并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器(实际上是创建表格的语句),并且是通过映射来自D B。SSIS在Unicode和非Unicode错误之间进行转换

不管我做了什么,我总是得到这个unicode - >源和目标之间的非unicode转换错误。尝试转换为S> D之间的字符串[DT_STR],将其删除,将SQL Table VARCHAR更改为NVARCHAR并仍然出现此flippin错误。

因为我创造了板材在Excel中使用SQL语句我没有看到任何方式实际的前定义列的数据类型将在Excel工作表的内容。我想这将是一个默认的元数据,但我不知道。

因此,在我的SQL表目的地和用这个SSIS sql语句创建我的Excel工作表之间,我该如何阻止这个错误呢?

我的错误是:

错误在数据流任务[OLE DB源[1]:列 “MyColumn” 不能Unicode和非Unicode字符串数据类型之间的转换。

而对于所有nvarchar列。

感谢所有帮助

感谢

安德鲁

+5

你需要使用'数据Conversion'非unicode'转换''到因为unicode' Excel识别删除SSIS包的转换部分只有'unicode'数据 – praveen

+0

,删除的目的和excel连接,包括删除工作簿中由SQL创建的工作表并重新启动。现在它加载好与上erros – Andrew

+0

正如我所说的现在取消转换工作正常。从我所了解的SQL数据列类型是NVARCHAR是unicode类型,因此不需要转换。 – Andrew

回答

42

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

你需要做的这对所有的字符串列...

+17

工程,但应该有一个“腕管隧道”警告/声明附加到答案。 –

+2

biml在这种情况下会很方便@ pokerplayer23 – gazma

10
  1. 首先,添加一个数据转换模块到您的数据流图。

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

  3. 转到目标块。转到在其中映射,并将新创建的元素映射到其相应的地址并保存。

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

16

下面的步骤为我工作:

1)。右键单击源任务。 2)。点击“显示高级编辑器”。 advanced edit option for source task in ssis

3)。转到“输入和输出属性”选项卡。 4)。选择您遇到错误的输出列。 5)。其数据类型将是“String [DT_STR]”。 6)。将该数据类型更改为“Unicode字符串[DT_WSTR]”。 Changing the data type to unicode string

7)。保存并关闭。 希望这有助于!

1

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

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

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

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

祝你好运!

0

我一直有同样的问题,并试图在这里写的一切,但它仍然给我同样的错误。 我试图转换的列中显示为NULL值。

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

干杯, 艾哈迈德

0

我经历过这样的情况,当我已经安装了Oracle版本连接到Windows上运行Oracle 12个服务器12客户机32位客户端。 尽管Oracle-source和SqlServer-destination都不是Unicode,我仍然收到这条消息,就好像oracle列是Unicode一样。 我解决了插入数据转换框的问题,并且 为varchar2字段选择了类型DT-STR(非unicode),为数字字段选择了DT-WSTR(unicode),然后我从输出字段中删除了“COPY OF”名称。 请注意,我不断收到错误信息,因为我已将源框箭头连接到转换框,然后设置转换类型。所以我不得不切换源代码框,并清除了目标框中的所有错误。

0

而不是添加早先建议的数据转换您可以将nvarchar列转换为varchar列。这样可以防止您进行不必要的步骤,并且可以获得更高的性能。

在选择你的SQL语句时,把date替换成CAST(date AS varchar([size]))。出于某种原因,这还没有改变输出数据类型。要做到这一点做到以下几点:

  1. 右键点击你的OLE DB源一步,打开高级编辑。
  2. 转到输出输入特性
  3. 选择输出列
  4. 选择列
  5. 根据数据类型属性改变数据类型为字符串[DT_STR]
  6. 改变长度,以你在CAST指定的长度声明

做完这些之后,您的源数据将作为varchar输出,并且您的错误将消失。

Source

0

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

enter image description here

相关问题