哈希一行SQL行?

时间:2012-06-25 08:56:35

标签: sql sql-server sql-server-2008

有没有办法在SQL表中使用md5sum来检查是否有任何列被修改过?

我想检查是否有任何特定列已更改,而不是我在文本文件中保存的数据的旧副本(我将在C#中使用md5sum)。

编辑:只需md5suming每一行

4 个答案:

答案 0 :(得分:18)

CHECKSUM(*)BINARY_CHECKSUM(*)CHECKSUM_AGG。他们做CRC32就像checkum一样,但是为了检测行的变化,它应该绰绰有余(你说的是假冒负面碰撞中有40亿的机会)。

使用HASHBYTES执行加密哈希需要您构造一个表示'row'的表达式。

答案 1 :(得分:11)

如果你有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;

答案 2 :(得分:1)

获取所有行,执行每列的md5并将其与先前数据中对应列的md5进行比较。

答案 3 :(得分:0)

我必须开发一种解决方案来比较表结构并运行一个过程以导入表之间的差异。

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

->表结构     创建表#table1(     坎波瓦尔查尔(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 )

也许这对于需要相同事物的人很有用