使用SQL Server Integration Services(SSIS)执行增量数据加载,比较要导入的哈希值和现有的行数据。我正在使用这个:
http://ssismhash.codeplex.com/
创建SHA512哈希以进行比较。当尝试使用条件性拆分任务(表达式为NEW_HASH == OLD_HASH)从数据库比较数据导入哈希和现有哈希时,输入表达式时出现以下错误:
The data type "DT_BYTES" cannot be used with binary operator "==". The type of one or both of the operands is not supported for the operation. To perform this operation, one or both operands need to be explicitly cast with a cast operator.
在比较之前尝试将每个列转换为字符串(DT_WSTR,64)会导致截断错误。
有更好的方法可以做到这一点,还是我错过了一些小细节?
由于
答案 0 :(得分:1)
您是否尝试过将长度扩展到64以上?我相信DT_BYTES有效最多8000个字符。我根据books online article验证了以下是DT_BYTES的合法演员目的地:
我还在BIDS中运行了一个测试,并确认一旦我将它们转换为足够长的数据类型,就可以比较这些值。
答案 1 :(得分:1)
SHA512有点像实际碰撞的机会是1 ^ 2 ^ 256。 SHA512总是输出512位,即64字节。我有类似的情况,我检查传入的二进制文件的哈希值。我使用查找转换而不是条件拆分。
答案 2 :(得分:1)
此帖较旧,但为了帮助其他用户......
答案是在SSIS中,您无法使用==运算符比较二进制数据。
我所看到的是人们最常将哈希值转换(并存储)为varchar或nvarchar,可以在SSIS中进行比较。
我相信其他用户已正确回答了您的“截断”问题。