哈希一行SQL行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈希一行SQL行?相关的知识,希望对你有一定的参考价值。
有没有办法在SQL表中使用md5sum来检查是否有任何列已被修改?
我想检查是否有任何特定列已被更改,而不是我在文本文件中保存的数据的旧副本(我将在C#中使用md5sum)。
编辑:每行md5suming
答案
有CHECKSUM(*)
,BINARY_CHECKSUM(*)
和CHECKSUM_AGG
。他们做CRC32就像checkum一样,但是为了检测行的变化,它应该绰绰有余(你说的是假冒负面碰撞中有40亿的机会)。
使用HASHBYTES
执行加密哈希需要您构造表示“行”的表达式。
另一答案
如果您有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;
另一答案
获取所有行,执行每列的md5并将其与先前数据中对应列的md5进行比较。
另一答案
我必须开发一个比较表结构的解决方案,并运行一个过程来导入表之间的差异。
我使用下面的代码来选择数据
- >表结构创建表#table1(campo 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 )
也许这对需要同样事情的人有用
以上是关于哈希一行SQL行?的主要内容,如果未能解决你的问题,请参考以下文章