我有一个.NET Windows服务,它将SQL Server数据库与Oracle(11g)数据库同步(这是手动完成的,因为第三方Oracle数据库中没有主键,我们无法使用SQL Server复制) .
我使用每行的MD5哈希来检查发布者和订阅者之间的差异,并尝试确保MD5函数的输入具有相同的SQL Server和Oracle数据库格式,以便将苹果与苹果进行比较 . 因此,对于 NUMBER
列(在SQL Server表的相应列中是'FLOAT'),我将值格式化如下:
Oracle
select to_char(13.9, '000000000.00000000000000000000')
from dual;
SQL Server
select FORMAT(13.9, '000000000.00000000000000000000')
这种情况在大多数情况下都可以正常工作,但是,当 NUMBER
列的值达到10个数字时,似乎是在Oracle to_char
函数的情况下 . 1000000000(而不是999999999)然后 to_char
输出一串哈希符号:
###############################
这意味着对于某些值,我的MD5函数的输入在Oracle和SQL Server之间不同 .
我能用 to_char
做些什么来纠正这个问题吗?
1 回答
您的格式掩码指定 nine leading digits . 因此,当你传递函数一个带有十个前导数字的数字时,你可能不会期望一串
###
,你应该期待异常行为:)最简单的解决方案:使您的格式掩码更大 . 你允许数字到二十个小数位,这是非常精确的 . 为什么不那么慷慨与不可分割的一部分?