SSIS 条件拆分错误 - 数据类型 DT_BYTES 不能与二元运算符“==”一起使用

Posted

技术标签:

【中文标题】SSIS 条件拆分错误 - 数据类型 DT_BYTES 不能与二元运算符“==”一起使用【英文标题】:SSIS Conditional Split Error - The data type DT_BYTES cannot be used with binary operator "==" 【发布时间】:2021-12-30 20:33:22 【问题描述】:

在使用以下表达式配置条件拆分组件时:

[VersionStamp_Source] == (DT_I8)[VersionStamp_Destination]

我收到以下错误:

数据类型 DT_BYTES 不能与二元运算符“==”一起使用。

截图:

【问题讨论】:

VersionStamp_SourceVersionStamp_Destination 列的来源是什么?你的二进制字符串的长度是多少? 【参考方案1】:

如错误消息所示,条件拆分表达式中使用的列之一的数据类型为DT_BYTES,无法使用二元运算符进行比较。

您需要将此列转换为另一种数据类型。正如official documentation 中提到的,DT_BYTES 可以转换为DT_I8 或字符串数​​据类型。

正如 @billinkc 在 cmets 中提到的,将 DT_BYTES 转换为字符串数据类型更可取,因为某些值无法转换为 8 字节整数。

要解决您的问题,请尝试使用以下表达式:

    (DT_WSTR,255)[VersionStamp_Source] == (DT_WSTR,255)[VersionStamp_Destination]

另外,请确保为字符串转换运算符使用准确的长度。您可以将字符串长度增加到4000

【讨论】:

DT_BYTES 是否可以转换为整数完全取决于二进制数据的长度。如果这是标准散列算法的结果,那么即使是最差的 MD2/3/5 也会产生一个 16 字节的值,这是您可以存储在 8 字节有符号整数中的两倍。字符串转换虽然很有意义,但我会提倡用户使用 注意到了,@billinkc。我编辑了我的答案以提及这一点。非常感谢! 感谢 Hadi,使用 (DT_WSTR,255)[VersionStamp_Source] == (DT_WSTR,255)[VersionStamp_Destination] 解决了这个问题。 @Gidda 请mark the answer as accepted

以上是关于SSIS 条件拆分错误 - 数据类型 DT_BYTES 不能与二元运算符“==”一起使用的主要内容,如果未能解决你的问题,请参考以下文章

SSIS中对多个工作表的条件拆分转换

SSIS 多个条件拆分

SSIS条件拆分为平面文件目的地

SSIS条件性分裂谱系误差

SSIS有条件拆分拒绝文件[关闭]

在 SSIS 中将数据写入 Excel 文件时出现无法解释的错误