哈希SQL行?(hash a SQL row?)

2019-07-30 02:36发布

有没有办法来MD5SUM在SQL表中的行来检查任何列是否已被修改?

我想检查任何特定的列是否已改变了对我在一个文本文件(我将在C#中的md5sum)保存数据的旧副本。

编辑:只是的md5sum-ING每一行

Answer 1:

CHECKSUM(*) BINARY_CHECKSUM(*)CHECKSUM_AGG 。 他们这样做CRC32像checkum,但对于检测更改的行应该是绰绰有余(你是在4个十亿机会谈论1的假阴性碰撞)。

否则使用密码散列HASHBYTES需要,可以构建代表“行”的表达式。



Answer 2:

如果您有SQL Server 2008或更新,你可以使用:

SELECT HASHBYTES('SHA1', (SELECT TOP 1 * FROM dbo.Table FOR XML RAW))

要么

SELECT  
    HASHBYTES('SHA1',(
        SELECT  * 
        FROM    dbo.myTable as  tableToHash 
        where   tableToHash.myUniqueKey=myTable.myUniqueKey 
        FOR XML RAW
    ))                                              as  rowSHA1
from    dbo.myTable;


Answer 3:

获取所有的行,做每一列的MD5和它对应的列在前面的数据的MD5进行比较。



Answer 4:

我不得不开发解决方案比对表结构和运行程序导入的表之间的差异。

我用下面的代码来选择数据

- >表的结构创建表#table1的(坎普VARCHAR(10),campo1 VARCHAR(10))

create table #table2 (
campo varchar(10)
,campo1 varchar(10)
)

- >插入值

insert into #table1 values ('bruno',1)
insert into #table1 values ('bruno',2)
insert into #table2 values ('bruno',1)
insert into #table2 values ('bruna',2)

- >创建一个哈希列比较

select *,HASHBYTES('SHA1', (select z.* FOR XML RAW)) as hash
    into #compare1
 from #table1 z 

select *,HASHBYTES('SHA1', (select k.* FOR XML RAW)) as hash
    into #compare2
 from #table2 k 

- >检查有任何差异的线

select * from  #compare1 a
full outer join #compare2 b on a.hash = b.hash
where ( a.hash is null or b.hash is null )

也许这是有人需要同样的东西有用



文章来源: hash a SQL row?