sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuáles son las diferencias entre CHECKSUM() y BINARY_CHECKSUM() y cuándo/cuáles son los escenarios de uso apropiados?

Consulte la siguiente publicación de blog que destaca las diferencias.

http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

Agregando información desde este enlace:

La intención clave de las funciones CHECKSUM es construir un índice hash basado en una expresión o una lista de columnas. Si, por ejemplo, lo usa para calcular y almacenar una columna en el nivel de la tabla para indicar la suma de verificació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 unir 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 comparan; de lo contrario, el valor sería diferente y generaría problemas.

No recomendaríamos usar la suma de comprobación (*), ya que el valor que se generará de esa manera se basará en el orden de las columnas de la definición de la 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 de fecha y hora, ya que la granularidad es de 1/300 de segundo e incluso una pequeña variación dará como resultado un valor de suma de comprobación diferente. Por lo tanto, si tiene que usar una columna de tipo de datos de fecha y hora, asegúrese de obtener la fecha exacta + hora/min. es decir, el nivel de granularidad que desea.

Hay tres funciones de suma de comprobación disponibles para usted:

CHECKSUM:Esto se describió anteriormente.

CHECKSUM_AGG:Esto devuelve la suma de comprobación de los valores en 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 su nombre indica, devuelve el valor de la 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 "descifrar" serán diferentes en el caso de BINARY_CHECKSUM pero serán los mismos para la función CHECKSUM (suponiendo que tenemos 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 el mismo tipo y representación de bytes. Por lo tanto, "2Volvo Director 20" y "3Volvo Director 30" generará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                -341465450
3Volvo Director 30  -1356512636                -341453853
4Volvo Director 40  -1356512636                -341455363