【发布时间】:2012-02-07 06:56:50
【问题描述】:
是否可以从两个数据库服务器生成哈希码并进行比较?如何在 SQL Server 中编写以下伪 SQL?尤其是在 SQL server 和 oracle 中接受多个数字/浮点列的两个 getHash 函数。
select s.PK
from sqltable s
join openquery(oracleLinkedServer,
'select PK, getHash(Column1, floatColumn2, ..., floatColumnN) oracleHash
from oracleTable') o on o.PK = s.PK
where
getHash(Column1, floatColumn2, ..., floatColumnN) <> oracleHash
【问题讨论】:
-
鉴于 SQL Server 和 Oracle 之间的许多数据类型不太可能有 100% 匹配的表示,它不太可能工作
-
如果您将所有值转换为大字符串 (x, 1.234, 2.345 = "x1.2342.345"),然后根据相同的编码(例如 md5)计算哈希值,它可能会起作用。
-
@tbone 将它们连接成一个大字符串可能会带来更多的不确定性。
-
@Damien_The_Unbeliever 同意了。我这样做是为了避免由于连接速度慢而从远程服务器中提取太多数据。
-
@NickW 我相当确定,给定相同的输入字符串,md5 的 Oracle 实现将给出与 SQL Server 实现相同的 32 十六进制值(假设不使用随机数或随机盐)。我无权访问 SQL Server,但我会挑战你证明这是错误的。
标签: sql-server oracle hash