首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HASHBYTES()是另一个HASHBYTES()的结果,还是HASHBYTES()的CHECKSUM_AGG()?

HASHBYTES()是另一个HASHBYTES()的结果,还是HASHBYTES()的CHECKSUM_AGG()?
EN

Database Administration用户
提问于 2022-07-21 23:33:18
回答 1查看 399关注 0票数 1

我想从另一个HASHBYTES()的结果中聚合一个HASHBYTES()。类似于CHECKSUM_AGG()为校验和()所做的事情。

我已经找到了如何从表中每一行列创建一个散列:

代码语言:javascript
运行
复制
SELECT 
    hashbytes('MD5', (
            SELECT SPECIFIC_SCHEMA
                ,SPECIFIC_NAME
                ,ROUTINE_SCHEMA
                ,ROUTINE_NAME
                ,ROUTINE_TYPE
                ,ROUTINE_DEFINITION
            FROM (
                VALUES (NULL)
                ) foo(bar)
            FOR XML auto
            )) AS [Hash]
FROM INFORMATION_SCHEMA.ROUTINES AS MBT;

如何从返回的所有哈希行聚合到单个散列?

(是的,为了与其他数据库中的表(S)进行比较,我想将一个表缩小为一个散列)。

EN

回答 1

Database Administration用户

发布于 2022-07-22 00:09:51

您可以使用CONCAT连接每一行的所有列,然后使用STRING_AGG连接整个表,并散列结果。

我不能说,面对碰撞,这样的哈希会有多可靠。无论如何,MD5是不推荐的,您应该使用SHA2_512

代码语言:javascript
运行
复制
SELECT 
    HASHBYTES('SHA2_512',
      STRING_AGG(CONCAT(
        CAST(SPECIFIC_SCHEMA AS nvarchar(max))  -- at least one '(max)'
       ,SPECIFIC_NAME
       ,ROUTINE_SCHEMA
       ,ROUTINE_NAME
       ,ROUTINE_TYPE
       ,ROUTINE_DEFINITION
       ), '')) AS [hash]
FROM INFORMATION_SCHEMA.ROUTINES AS MBT;

db<>fiddle

为什么要使用INFORMATION_SCHEMA.ROUTINES而不是sys.procedures是另一个问题。这只是一个例子吗?

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/314717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档