SSIS在Unicode和非Unicode错误之间转换

问题描述 投票:44回答:8

我有一个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 ssis non-unicode
8个回答
58
投票

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

您需要为所有字符串列执行此操作...


47
投票

以下步骤对我有用:

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)。保存并关闭。希望这可以帮助!


14
投票
  1. 首先,将数据转换块添加到数据流图中。
  2. 打开数据转换块并勾选显示错误的列。下面将其数据类型更改为unicode字符串(DT_WSTR)或预期的任何数据类型并保存。
  3. 转到目标区块。转到其中的映射并将新创建的元素映射到其对应的地址并保存。
  4. 在解决方案explorer.select属性中右键单击您的项目。选择配置属性并在其中选择调试。在这里,将Run64BitRunTime选项设置为false(因为excel不能很好地处理64位应用程序)。

7
投票

您可以将nvarchar列转换为varchar列,而不是添加先前建议的数据转换。这可以防止您进行不必要的步骤,并且具有比替代方案更高的性能。

在选择您的SQL语句时,用date替换CAST(date AS varchar([size]))。由于某种原因,这还没有改变输出数据类型。为此,请执行以下操作:

  1. 右键单击“OLE DB源”步骤,然后打开高级编辑器。
  2. 转到输入和输出属性
  3. 选择输出列
  4. 选择你的专栏
  5. 在“数据类型属性”下,将DataType更改为字符串[DT_STR]
  6. 将长度更改为您在CAST语句中指定的长度

执行此操作后,您的源数据将作为varchar输出,您的错误将消失。

Source


4
投票

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

enter image description here


3
投票

当我安装Oracle版本12客户端32位客户端连接到运行在Windows上的Oracle 12 Server时,我遇到了这种情况。尽管Oracle-source和SqlServer-destination都不是Unicode,但我仍然收到此消息,就像oracle列是Unicode一样。我解决了插入数据转换盒的问题,为varchar2字段选择了DT-STR(不是unicode),为数字字段选择了DT-WSTR(unicode),然后我从输出字段名中删除了'COPY OF'。请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接起来。所以我不得不切换源框,这清理了目标框中的所有错误。


2
投票

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

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

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

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

祝好运!


1
投票

我一直有同样的问题,并尝试了所有写在这里,但它仍然给了我同样的错误。原来是我试图转换的列中的NULL值。

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

什拉,艾哈迈德

© www.soinside.com 2019 - 2024. All rights reserved.