从SQL Server和Oracle获取哈希值并进行比较?

ca9*_*3d9 5 sql-server oracle hash

是否可以从两个数据库服务器生成哈希代码并进行比较?如何在SQL Server中编写以下伪SQL?特别是getHash在SQL server和oracle中接受mutliple numeric/float列的两个函数.

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
Run Code Online (Sandbox Code Playgroud)

tbo*_*one 10

在SQL Server中:

select upper(substring(sys.fn_sqlvarbasetostr(hashbytes('MD5','A')),3,32));
Run Code Online (Sandbox Code Playgroud)

结果:

7FC56270E7A70FA81A5935B72EACBE29
Run Code Online (Sandbox Code Playgroud)

在Oracle中:

select rawtohex(
    DBMS_CRYPTO.Hash (
        UTL_I18N.STRING_TO_RAW ('A', 'AL32UTF8'),
        2)
    ) from dual;
Run Code Online (Sandbox Code Playgroud)

结果:

7FC56270E7A70FA81A5935B72EACBE29
Run Code Online (Sandbox Code Playgroud)

确保您的字符串完全相同(区分大小写).在这里我使用'A'作为一个简单的例子,但它可能是任何字符串.

如果通过转换为大字符串来避免数据类型差异,则应该能够在不同平台上生成相同的md5哈希.请注意,SQL Server在哈希前面添加了一个'0x'来表示十六进制表示,我用子字符串去掉了它.