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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型转换在本地PC和服务器环境之间更改相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

答案

我的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 ....

以上是关于类型转换在本地PC和服务器环境之间更改的主要内容,如果未能解决你的问题,请参考以下文章

这个片段中发生了啥关于 n 在 pc[i] 中的表示

在代码片段中包含类型转换

在默认类型和 C 互操作类型之间转换 Fortran 字符和逻辑数组

在默认类型和 C 互操作类型之间转换 Fortran 字符和逻辑数组

NAT的三种类型

共享元素转换在父片段和子片段之间不起作用(嵌套片段)