【问题标题】:Type Conversion changes between Local PC and Server environment本地 PC 和服务器环境之间的类型转换变化
【发布时间】:2017-03-27 09:13:11
【问题描述】:

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

这可以在我的本地 PC 上正常工作。然后我部署到服务器,它说

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

在尝试了几件事后,我举起双手,将data conversion 取出到 unicode,现在它坏了,无法在我的 PC 上运行。

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

为什么我的 PC 和服务器不能正常工作?两者的所有表和数据连接都是相同的。除了执行位置没有变化。

【问题讨论】:

    标签: sql-server ssis type-conversion etl sql-server-data-tools


    【解决方案1】:

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

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

    解决方法

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

    1. 我用Script Component 替换了Data Conversion 组件
    2. 我将要转换的列标记为输入
    3. 对于我要转换的每一列,我创建了一个DT_WSTR 类型的输出列
    4. 在每列的脚本中,我使用了以下代码:(假设输入为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 ....
    

    【讨论】:

    • 你的意思是CAST([COLUMN] as NVARCHAR2(255))
    • 不,是nvarchar,我假设你的源是一个sql server表,目标是一个oracle表
    • 如果源是oracle服务器,使用CAST([Column] AS VARCHAR2(255))
    • 我没有尝试您的解决方法的第一部分,但第二部分足以让它工作。它只需要在文本字段上,因为所有其他人都应付了。
    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2011-04-22
    • 1970-01-01
    • 2017-01-09
    • 2017-05-10
    • 2022-10-13
    相关资源
    最近更新 更多