我有一个.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')
这在大多数情况下都可以正常工作,但在to_char
列的值达到10个数字的情况下,似乎是在Oracle NUMBER
函数的情况下。 1000000000(而不是999999999)然后to_char
输出一串哈希符号:
###############################
这意味着对于某些值,我的MD5函数的输入在Oracle和SQL Server之间不同。
我可以使用to_char
来解决此问题吗?
答案 0 :(得分:3)
您的格式掩码指定九个前导数字。因此,当您传递函数时,您可能不会期望一个###
字符串,但是当您传递一个带有十个前导数字的数字时,您应该会出现异常行为:)
最简单的解决方案:使您的格式掩码更大。你允许数字到二十个小数位,这是非常精确的。为什么不那么慷慨与不可分割的一部分?