是否等同于
CHECKSUM_AGG(CHECKSUM(*))
对于HashBytes?
我知道你可以做到
SELECT
HashBytes('MD5',
CONVERT(VARCHAR,Field1) + '|'
+ CONVERT(VARCHAR,Field2) + '|'
+ CONVERT(VARCHAR,field3) + '|'
)
FROM MyTable
但我不确定如何将所有计算的hashbyte记录聚合到SQL内的单个值中。
我想要这样做的一个原因是确定在将数据移入我的系统之前,自上次加载以来源表中的数据是否已更改。
答案 0 :(得分:1)
如果要检查给定行是否已更改,我强烈建议您使用“timestamp”列。 每次修改时,Sql Server会自动更新该值。 然后,如果一行被更改,修改后的值会有所不同,您可以在没有实现逻辑或查询整个表的情况下注意到它。
但如果您想知道是否至少有一行已更新,我建议您使用:
DECLARE @Tablename sysname ='MyTable';
SELECT modify_date FROM sys.tables WHERE name = @Tablename;
(如果你在业务层使用.Net,那么你可能会对SqlDependency有所了解)
答案 1 :(得分: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