Existe-t-il un moyen de md5sum une ligne dans une table SQL pour vérifier si une colonne a été modifiée?
Je voudrais vérifier si une colonne particulière a été modifiée par rapport à une ancienne copy des données que je tiens dans un file text (que je vais md5sum en C #).
EDIT: Juste md5sum-ing chaque rangée
Il y a CHECKSUM(*)
, BINARY_CHECKSUM(*)
et CHECKSUM_AGG
. Ils font CRC32 comme checkum, mais pour détecter les changements dans une rangée, il devrait être plus que suffisant (vous parlez de 1 sur 4 milliards de chances d'une collision faux-négatifs).
Faire un hachage cryptographique en utilisant HASHBYTES
nécessite de build une expression représentant la 'ligne'.
Si vous avez SQL Server 2008 ou plus récent, vous pouvez utiliser:
SELECT HASHBYTES('SHA1', (SELECT TOP 1 * FROM dbo.Table FOR XML RAW))
ou
SELECT HASHBYTES('SHA1',( SELECT * FROM dbo.myTable as tableToHash where tableToHash.myUniqueKey=myTable.myUniqueKey FOR XML RAW )) as rowSHA1 from dbo.myTable;
Obtenez toutes les lignes, faites le md5 de chaque colonne et comparez-le avec le md5 de la colonne correspondante dans datatables précédentes.