Ознакомьтесь со следующим сообщением в блоге, в котором освещаются различия.
http://decipherinfosys.wordpress.com/2007/05/18/checksum-functions-in-sql-server-2005/
Добавление информации по этой ссылке:
Ключевым назначением функций CHECKSUM является создание хеш-индекса на основе выражения или списка столбцов. Если, скажем, вы используете его для вычисления и сохранения столбца на уровне таблицы для обозначения контрольной суммы по столбцам, которые делают запись уникальной в таблице, то это может быть полезно при определении, изменилась ли строка или нет. Этот механизм затем можно использовать вместо объединения со всеми столбцами, которые делают запись уникальной, чтобы увидеть, была ли запись обновлена или нет. Электронная документация по SQL Server содержит множество примеров этой функциональности.
Несколько вещей, на которые следует обращать внимание при использовании этих функций:
Необходимо убедиться, что столбцы или порядок выражений одинаковы между двумя сравниваемыми контрольными суммами, иначе значение будет другим и приведет к проблемам.
Мы не рекомендуем использовать контрольную сумму (*), поскольку значение, которое будет сгенерировано таким образом, будет основано на порядке столбцов определения таблицы во время выполнения, который может легко измениться в течение определенного периода времени. Итак, явно определите список столбцов.
Будьте внимательны при включении столбцов типа данных datetime, поскольку гранулярность составляет 1/300 секунды, и даже небольшое изменение приведет к другому значению контрольной суммы. Поэтому, если вам нужно использовать столбец типа данных datetime, убедитесь, что вы получите точную дату + час / мин. то есть уровень детализации, который вы хотите.
Вам доступны три функции контрольной суммы:
CHECKSUM: это было описано выше.
CHECKSUM_AGG: возвращает контрольную сумму значений в группе, и значения Null в этом случае игнорируются. Это также работает с предложением OVER новой аналитической функции в SQL Server 2005.
BINARY_CHECKSUM: как следует из названия, возвращается двоичное значение контрольной суммы, вычисленное по строке или списку выражений. Разница между CHECKSUM и BINARY_CHECKSUM заключается в значении, сгенерированном для строковых типов данных. Примером такой разницы являются значения, сгенерированные для «DECIPHER» и «decipher», которые будут разными в случае BINARY_CHECKSUM, но будут одинаковыми для функции CHECKSUM (при условии, что у нас установлена инстанция без учета регистра).
Другое отличие заключается в сравнении выражений. BINARY_CHECKSUM () возвращает одно и то же значение, если элементы двух выражений имеют одинаковый тип и байтовое представление. Таким образом, «2Volvo Director 20» и «3Volvo Director 30» приведут к одному и тому же значению, однако функция CHECKSUM () оценивает тип, а также сравнивает две строки и, если они равны, возвращается только одно и то же значение.
Example:
STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE
------------------- ---------------------- -----------
2Volvo Director 20 -1356512636 -341465450
3Volvo Director 30 -1356512636 -341453853
4Volvo Director 40 -1356512636 -341455363