将sql结果集聚合为HashBytes值
是否有一个相当于将sql结果集聚合为HashBytes值,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否有一个相当于 CHECKSUM_AGG(CHECKSUM(*)) 对于哈希字节 我知道你能行 SELECT HashBytes('MD5', CONVERT(VARCHAR,Field1) + '|' + CONVERT(VARCHAR,Field2) + '|' + CONVERT(VARCHAR,field3) + '|' ) FROM MyTable 但我不知道如何将所有计算出的hashbyte记录聚合到SQL中的单个
CHECKSUM_AGG(CHECKSUM(*))
对于哈希字节
我知道你能行
SELECT
HashBytes('MD5',
CONVERT(VARCHAR,Field1) + '|'
+ CONVERT(VARCHAR,Field2) + '|'
+ CONVERT(VARCHAR,field3) + '|'
)
FROM MyTable
但我不知道如何将所有计算出的hashbyte记录聚合到SQL中的单个值中
我想这样做的一个原因是,在将数据移动到我的系统中之前,先确定源表中的数据自上次加载以来是否发生了更改。如果要检查给定行是否发生了更改,我强烈建议您使用“timestamp”列。 Sql Server会在每一行修改中自动更新该值。 然后,如果一行被更改,修改后的值将不同,您可以注意到它,而无需实现逻辑或查询整个表 但如果您想知道是否至少有一行已更新,我建议您使用: 声明@Tablename sysname='MyTable' 从sys.tables中选择modify_date,其中name=@Tablename
(如果您在业务层中使用.Net,您可能会感兴趣地查看SqlDependency)您可以遍历所有记录并将哈希合并到一个记录中
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
尝试对所有内容都进行hashbyte选择?这并不能回答您的问题,但如果您试图确定数据是否已更改,则应查看。