类型转换在本地PC和服务器环境之间更改

问题描述 投票:2回答:1

我从SQL表中获取一些简单的数据,进行小的转换并将其转换为Unicode。然后我将其输出到Oracle服务器上的Oracle CHAR(1 byte)字段中。

这在我的本地PC上没有任何错误。然后我部署到服务器,它说

“列”“无法在unicode和非unicode字符串数据类型之间进行转换”。

在尝试了几件事之后,我把手举到空中,然后把data conversion拿出去unicode,现在它坏了,不会在我的电脑上运行。

但是 - 它现在可以在服务器上运行,并且很开心。我搜索过并发现其他人遇到了这个问题,但似乎没有人找到原因,只是以其他方式解决问题。

为什么我的PC和我的服务器工作不一样?所有表和数据连接都是相同的。除执行地点外无其他变化。

sql-server ssis type-conversion etl sql-server-data-tools
1个回答
2
投票

我的SSIS包中遇到了同样的问题,但没有找到解决方案。

这是一个简单的数据,不包含任何unicode字符,如果使用SQL查询或.net代码转换它,它不会抛出任何异常...但是当使用Data Conversion Transformation时它会在SSIS中引发异常

解决方法

我做了一个简单的解决方法来实现这一点(如果再次出现此错误,您可以使用它)

  1. 我用Data Conversion替换了Script Component组件
  2. 我将要转换的列标记为输入
  3. 对于我想要转换的每一列,我创建了一个DT_WSTR类型的输出列
  4. 在每列的脚本中,我使用了以下代码:(假设输入为inColumn,输出为outColumnIf Not Row.inColumn_IsNull AndAlso _ Not String.IsNullOrEmpty(Row.inColumn) Then Row.outColumn = Row.inColumn Else Row.outColumn_IsNull = True End If

要么

如果源是OLEDB Source,你可以在OLEDB source command中使用强制转换函数

例如:

SELECT CAST([COLUMN] as NVARCHAR(255)) AS [COLUMN]
FROM ....
© www.soinside.com 2019 - 2024. All rights reserved.