Hash строка SQL?

Есть ли способ md5sum строки в таблице SQL, чтобы проверить, был ли изменен какой-либо столбец?

Я хотел бы проверить, был ли изменен какой-либо конкретный столбец в сравнении со старой копией данных, которые хранятся в текстовом файле (который я буду md5sum на С#).

EDIT: просто md5sum-ing каждой строки

Ответы

Ответ 1

CHECKSUM(*), BINARY_CHECKSUM(*) и CHECKSUM_AGG. Они делают CRC32 как контрольный, но для обнаружения изменений в строке его должно быть более чем достаточно (вы говорите о 1 из 4 миллиардов шансов на ложное отрицательное столкновение).

Выполнение криптографического хэша с использованием HASHBYTES требует создания выражения, представляющего строку.

Ответ 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;

Ответ 3

Получите всю строку, сделайте md5 каждого столбца и сравните ее с md5 соответствующего столбца в предыдущих данных.