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 соответствующего столбца в предыдущих данных.