【问题标题】:SQL Server equivalent of Oracle standard_hash functionSQL Server 等效于 Oracle standard_hash 函数
【发布时间】:2021-11-18 10:46:23
【问题描述】:

我正在将数据库从 Oracle 移动到 SQL Server,但我不知道如何在 SQL Server 中创建它:

"MY_HASH" RAW(32) GENERATED ALWAYS AS (STANDARD_HASH("SSN"||'|'||TO_CHAR("DATE_OF_BIRTH",'DD-MON-RR'),'SHA256')) VIRTUAL ,

感谢您的帮助。

【问题讨论】:

  • 这是创建表脚本中的列名。
  • 散列依赖于数据库。你可以做类似的事情,但你不会得到完全相同的值。
  • 我编辑了标题以专门提及standard_hash,因为这似乎是主要的技术问题(见我的回答)。如果to_char 和串联也是问题,我们可以对其进行修改以澄清这一点,但我假设这些更简单。

标签: sql sql-server oracle migration


【解决方案1】:

似乎在 SQL Server 中,您将使用 hashbytes 函数传递选项“SHA2_256”来生成与 Oracle 的 standard_hash 和“SHA256”相同的值:

SQL Server 2019 (DBFiddle):

select hashbytes('SHA2_256','Text')

Oracle 18c (DBFiddle):

select standard_hash('Text', 'SHA256') from dual;

都返回

0x71988C4D8E0803BA4519F0B2864C1331C14A1890BF8694E251379177BFEDB5C3

这是 Oracle 中的 raw(32) 值和 SQL Server 中的 binary(32)(我认为),而不是字符串,因此根据客户端工具的不同,它的显示方式可能不同。

【讨论】:

  • 谢谢,效果很好
猜你喜欢
  • 2011-05-01
  • 2011-09-04
  • 2014-05-30
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2014-02-20
  • 2012-09-15
  • 2022-08-16
相关资源
最近更新 更多