将sql结果集聚合成HashBytes值

Chr*_*uez 9 sql t-sql sql-server

是否有相当于

CHECKSUM_AGG(CHECKSUM(*)) 
Run Code Online (Sandbox Code Playgroud)

对于哈希字节?

我知道你能做到

SELECT 
    HashBytes('MD5', 
        CONVERT(VARCHAR,Field1) + '|' 
      + CONVERT(VARCHAR,Field2) + '|'
      + CONVERT(VARCHAR,field3) + '|'
    )
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将所有计算出的哈希字节记录聚合为 SQL 内的单个值。

我想要这样做的原因之一是在将数据移动到我的系统之前确定自上次加载以来源表中的数据是否已更改。

San*_*ojo 0

如果您想检查给定行是否已更改,我强烈建议您使用“时间戳”列。该值会在每次行修改时由 Sql Server 自动更新。然后,如果更改了一行,则修改后的值将有所不同,您无需实现逻辑或查询整个表即可注意到它。

但如果您想知道是否至少有一行已更新,我建议您使用:

DECLARE @Tablename sysname = 'MyTable';

SELECT modify_date FROM sys.tables WHERE name = @Tablename;
Run Code Online (Sandbox Code Playgroud)

(如果您在业务层中使用 .Net,那么您可能会对 SqlDependency 感兴趣)