有没有办法来MD5SUM在SQL表中的行来检查任何列是否已被修改?
我想检查任何特定的列是否已改变了对我在一个文本文件(我将在C#中的md5sum)保存数据的旧副本。
编辑:只是的md5sum-ING每一行
有没有办法来MD5SUM在SQL表中的行来检查任何列是否已被修改?
我想检查任何特定的列是否已改变了对我在一个文本文件(我将在C#中的md5sum)保存数据的旧副本。
编辑:只是的md5sum-ING每一行
有CHECKSUM(*)
BINARY_CHECKSUM(*)
和CHECKSUM_AGG
。 他们这样做CRC32像checkum,但对于检测更改的行应该是绰绰有余(你是在4个十亿机会谈论1的假阴性碰撞)。
否则使用密码散列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的(坎普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 )
也许这是有人需要同样的东西有用