Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将sql结果集聚合为HashBytes值_Sql_Sql Server_Tsql - Fatal编程技术网

将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选择?这并不能回答您的问题,但如果您试图确定数据是否已更改,则应查看。