Ответ 1
Ознакомьтесь со следующим сообщением в блоге, в котором подчеркиваются различия.
http://decipherinfosys.wordpress.com/2007/05/18/checksum-functions-in-sql-server-2005/
Добавление информации по этой ссылке:
Основной целью функций CHECKSUM является построение хеш-индекса на основе выражения или списка столбцов. Если вы используете его для вычисления и хранения столбца на уровне таблицы, чтобы обозначить контрольную сумму по столбцам, которые делают запись уникальной в таблице, тогда это может быть полезно при определении того, изменилась ли строка или нет. Затем этот механизм можно использовать вместо объединения со всеми столбцами, которые делают запись уникальной, чтобы увидеть, была ли эта запись обновлена или нет. В SQL Server Books Online есть много примеров этой функциональности.
Несколько вещей, которые следует учитывать при использовании этих функций:
Вы должны убедиться, что столбец (столбцы) или порядок выражения совпадают между двумя контрольными суммами, которые сравниваются, иначе значение будет отличаться и приведет к возникновению проблем.
Мы бы не рекомендовали использовать контрольную сумму (*), поскольку значение, которое будет генерироваться таким образом, будет основываться на порядковом столбце определения таблицы во время выполнения, которое может легко измениться с течением времени. Итак, явно укажите список столбцов.
Будьте внимательны при включении столбцов данных типа 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