¿Cuáles son las diferencias entre CHECKSUM() y BINARY_CHECKSUM () y cuándo/cuáles son los escenarios de uso apropiados?
Echa un vistazo a la siguiente entrada de blog que destaca las diferencias.
CHECKSUM Functions in SQL Server 2005
Añadir información desde este enlace:
La intención de clave de las funciones de SUMA de COMPROBACIÓN es crear un índice hash basado en una expresión o una lista de columnas. Si, por ejemplo, lo usa para calcular y almacenar una columna a nivel de tabla para denotar la suma de comprobación sobre las columnas que hacen que un registro sea único en una tabla, esto puede ser útil para determinar si una fila ha cambiado o no. Este mecanismo se puede usar en lugar de unirse con todas las columnas que hacen que el registro sea único para ver si el registro se ha actualizado o no. SQL Server Books Online tiene muchos ejemplos de esta funcionalidad.
Un par de cosas a tener en cuenta al usar estas funciones:
Debe asegurarse de que la(s) columna (s) o el orden de expresión sea el mismo entre las dos sumas de verificación que se están comparando, de lo contrario, el valor sería diferente y provocaría problemas.
No recomendamos usar suma de comprobación(*) ya que el valor que se generará de esa manera se basará en el orden de columna de la definición de tabla en tiempo de ejecución, que puede cambiar fácilmente durante un período de tiempo. Por lo tanto, defina explícitamente la lista de columnas.
Tenga cuidado al incluir las columnas de tipo de datos datetime, ya que la granularidad es de 1/300 de segundo e incluso una pequeña variación resultará en un valor de suma de comprobación diferente. Por lo tanto, si tiene que usar una columna de tipo de datos datetime, asegúrese de obtener la fecha exacta + hora/minuto. es decir, el nivel de granularidad que desea.
Hay tres funciones de suma de comprobación disponibles para usted:
SUMA DE comprobación: Esto se describió anteriormente.
CHECKSUM_AGG: Devuelve la suma de comprobación de los valores de un grupo y los valores nulos se ignoran en este caso. Esto también funciona con la nueva cláusula OVER de la función analítica en SQL Server 2005.
BINARY_CHECKSUM: Como indica el nombre, devuelve el valor de suma de comprobación binaria calculado sobre una fila o una lista de expresiones. La diferencia entre CHECKSUM y BINARY_CHECKSUM está en el valor generado para los tipos de datos de cadena. Un ejemplo de tal diferencia es que los valores generados para “DECIPHER” y “decipher” serán diferentes en el caso de un BINARY_CHECKSUM pero serán los mismos para la función CHECKSUM (suponiendo que tengamos una instalación de la instancia que no distingue entre mayúsculas y minúsculas). Otra diferencia está en la comparación de expresiones. BINARY_CHECKSUM() devuelve el mismo valor si los elementos de dos expresiones tienen la misma representación de tipo y byte. Por lo tanto, “2Volvo Director 20” y “3Volvo Director 30” darán el mismo valor, sin embargo, la función CHECKSUM() evalúa el tipo y compara las dos cadenas y si son iguales, solo se devuelve el mismo valor.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363