6

是否有相当于

CHECKSUM_AGG(CHECKSUM(*)) 

哈希字节?

我知道你能做到

SELECT 
    HashBytes('MD5', 
        CONVERT(VARCHAR,Field1) + '|' 
      + CONVERT(VARCHAR,Field2) + '|'
      + CONVERT(VARCHAR,field3) + '|'
    )
FROM MyTable

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

我想要这样做的一个原因是,在将数据移动到我的系统之前,确定自上次加载以来源表中的数据是否发生了变化。

4

2 回答 2

0

如果您想检查给定行是否已更改,我强烈建议您使用“时间戳”列。每次修改行时,Sql Server 都会自动更新该值。那么如果一行发生了变化,修改后的值会有所不同,你可以在不执行逻辑或查询整个表的情况下注意到它。

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

DECLARE @Tablename sysname = 'MyTable';

SELECT modify_date FROM sys.tables WHERE name = @Tablename;

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

于 2013-08-19T15:22:38.580 回答
0

您可以遍历所有记录并将哈希合并为一个

declare @c cursor;
declare @data varchar(max);
declare @hash varchar(400) = '';

set @c = cursor fast_forward for
    select cast(SomeINTData as varchar(50)) + SomeTextData
    from TFact
    where Year = @year
        and Month = @month;

open @c
fetch next from @c into @data
while @@FETCH_STATUS = 0 begin
    set @hash = HASHBYTES('sha1', @hash + @data)

    fetch next from @c into @data
end

select @hash Ha
于 2019-05-17T07:34:17.990 回答