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

And*_*rew 53 unicode ssis non-unicode

我有一个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列.

感谢任何帮助

谢谢

安德鲁

小智 58

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

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

  • 工作但应该有一个"腕管"警告/免责声明附在答案上. (35认同)
  • 在这个案例中,Biml会很方便@pokerplayer23 (2认同)
  • 我在 vs 2017 ent 中使用 ms sql 输入和 excel 输出时收到此错误。他们说人工智能将取代我们所有的工作。对于那些没有长时间完成 etl 的人来说,将字符字段从源复制到目标过去是很容易的部分。这是微软对微软。我们距离智能还有很长的路要走,更不用说人工智能了。 (2认同)

小智 52

以下步骤对我有用:

1).右键单击源任务.

2).单击"显示高级编辑器". ssis中源任务的高级编辑选项

3).转到"输入和输出属性"选项卡.

4).选择要获得错误的输出列.

5).其数据类型为"String [DT_STR]".

6).将该数据类型更改为"Unicode String [DT_WSTR]". 将数据类型更改为unicode字符串

7).保存并关闭.希望这可以帮助!

  • 我尝试过这个,但现在我在源编辑器(sql server)中遇到相同的转换错误 (6认同)

小智 15

  1. 首先,将数据转换块添加到数据流图中.

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

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

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


Ste*_*fan 8

您可以将nvarchar列强制转换为varchar列,而不是添加之前建议的数据转换。这样可以避免不必要的步骤,并具有比其他方法更高的性能。

在选择的SQL语句中,替换dateCAST(date AS varchar([size]))。由于某些原因,这尚未更改输出数据类型。为此,请执行以下操作:

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

完成此操作后,您的源数据将作为varchar输出,并且您的错误将消失。

资源


Ser*_*nko 6

这里缺少的是Data Conversion物体。它应该在OLE DB源对象和目标对象之间。

在此处输入图片说明


小智 5

似乎没有人提到这一点,但是在源查询中将 varchar 转换为 nvarchar 也解决了这个问题。