本地 PC 和服务器环境之间的类型转换变化

Type Conversion changes between Local PC and Server environment

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

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

"Column "A" cannot convert between unicode and non-unicode string data types".

尝试了几种方法后,我举起双手,将 data conversion 取出来转为 unicode,现在它坏了,无法在我的 PC 上 运行。

但是 - 它现在可以在服务器上运行并且一切正常。我搜索过并发现其他人也遇到过这个问题,但 none 似乎找到了原因并通过其他方式解决它。

为什么我的 PC 和服务器不能一样工作?所有 table 和数据连接都是相同的。除了执行位置外没有变化。

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

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

时在 SSIS 中抛出异常

解决方法

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

  1. 我用 Script Component
  2. 替换了 Data Conversion 组件
  3. 我将要转换的列标记为输入
  4. 对于我要转换的每一列,我都创建了一个 DT_WSTR
  5. 类型的输出列
  6. 在每列的脚本中,我使用了以下代码:(假设输入为 inColumn,输出为 outColumn

    If 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 ....