Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSI在Unicode和非Unicode之间转换错误_Unicode_Ssis_Non Unicode - Fatal编程技术网

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

SSI在Unicode和非Unicode之间转换错误,unicode,ssis,non-unicode,Unicode,Ssis,Non Unicode,我有一个ssis包,其中我使用一个OLEDB源链接到SQLServer2005表。除日期列外,所有列均为NVARCHAR(255)。我使用Excel目标并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器中(实际上是创建工作表的create table语句),并从DB中的列映射中派生 无论我做了什么,我都会在源和目标之间不断出现此unicode-->非unicode转换错误。尝试在S>D之间转换为字符串[DT_STR],将其删除,将SQL表VARCHAR更改为NVARC

我有一个ssis包,其中我使用一个OLEDB源链接到SQLServer2005表。除日期列外,所有列均为NVARCHAR(255)。我使用Excel目标并使用SQL语句在Excel工作簿中创建工作表,SQL位于Excel连接管理器中(实际上是创建工作表的create table语句),并从DB中的列映射中派生

无论我做了什么,我都会在源和目标之间不断出现此unicode-->非unicode转换错误。尝试在S>D之间转换为字符串[DT_STR],将其删除,将SQL表VARCHAR更改为NVARCHAR,但仍会出错

因为我是用SQL语句在Excel中创建工作表的,所以我看不到任何方法可以在Excel工作表中预先定义列的数据类型。我想这将是一个默认的元数据,但我不知道

因此,在我的SQL表目标和使用此SSIS SQL语句创建Excel表之间,如何才能阻止出现此错误

我的错误是:

数据流任务[OLE DB Source[1]]出错:“MyColumn”列无法在unicode和非unicode字符串数据类型之间转换

和所有nvarchar列

谢谢你的帮助

谢谢


Andrew

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

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

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

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

  • 去目的地街区。转到其中的映射,将新创建的元素映射到其相应的地址并保存

  • 在解决方案资源管理器中的项目上单击鼠标右键。选择“属性”。选择配置属性并在其中选择调试。在这种情况下,将Run64BitRunTime选项设置为false(因为excel不能很好地处理64位应用程序)


  • 以下步骤对我有效:

    1) 。右键单击源任务

    2) 。点击“显示高级编辑器”。

    3) 。转到“输入和输出属性”选项卡

    4) 。选择要获取错误的输出列

    5) 。其数据类型将为“String[DT_STR]”

    6) 。将该数据类型更改为“Unicode字符串[DT_WSTR]”。

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

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

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

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

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


    祝你好运

    我也遇到了同样的问题,尝试了这里写的所有东西,但它仍然给了我同样的错误。 结果是我试图转换的列中的空值

    删除空值解决了我的问题

    干杯,
    Ahmed

    我在安装Oracle 12版客户端32位客户端时遇到这种情况,该客户端连接到运行在windows上的Oracle 12服务器。 尽管Oracle源和SqlServer目标都不是Unicode,但我一直收到这条消息,就好像Oracle列是Unicode一样。 我解决了插入数据转换框的问题 为varchar2字段选择DT-STR(不是unicode)类型,为数字字段选择DT-WSTR(unicode),然后我从输出字段名中删除了“的副本”。
    请注意,我一直收到错误,因为在设置转换类型之前,我已将源框箭头与转换框连接。因此,我必须切换源框,这清除了目标框中的所有错误。

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

    在SQL语句的select中,将
    date
    替换为
    CAST(日期为varchar([size]))
    。由于某些原因,这还不会更改输出数据类型。要执行此操作,请执行以下操作:

  • 右键单击OLE DB源步骤并打开高级编辑器
  • 转到输入和输出属性
  • 选择输出列
  • 选择您的列
  • 在“数据类型属性”下,将数据类型更改为字符串[DT_STR]
  • 将长度更改为您在CAST语句中指定的长度
  • 执行此操作后,源数据将作为varchar输出,错误将消失


    这里缺少的部分是
    数据转换
    对象。它应该位于OLE DB源对象和目标对象之间


    在SQL Server中创建表时,将表列
    NVARCHAR
    改为
    VARCHAR

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

    您需要使用
    数据转换
    非unicode
    转换为
    unicode
    ,因为excel只识别
    unicode
    数据删除了SSIS包的转换部分,删除了目标和excel连接,包括删除工作簿中SQL创建的工作表并重新开始。现在它可以加载了,就像我说的那样,移除转换可以工作