Comparteix a través de


BINARY_CHECKSUM (Transact-SQL)

Se aplica a: SQL Server Base de datos de Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Punto de conexión de análisis SQL en Microsoft Fabric Almacén en Microsoft Fabric

Devuelve el valor binario de suma de comprobación calculado en una fila de una tabla o en una lista de expresiones.

Convenciones de sintaxis de Transact-SQL

Sintaxis

BINARY_CHECKSUM ( * | expression [ ,...n ] )   

Nota:

El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Argumentos

*
Especifica que el cálculo abarca todas las columnas de tabla. BINARY_CHECKSUM no incluye en el cálculo las columnas que tienen tipos de datos no comparables. Entre los tipos de datos no comparables están los siguientes:

  • cursor
  • image
  • ntext
  • text
  • xml

y los tipos de datos no comparables definidos por el usuario de CLR (Common Language Runtime).

expression
Una expresión de cualquier tipo. BINARY_CHECKSUM no incluye en el cálculo las expresiones que tienen tipos de datos no comparables.

Tipos de valor devuelto

int

Observaciones

BINARY_CHECKSUM(*), calculado en cualquier fila de una tabla, devuelve el mismo valor siempre que la fila no se modifique posteriormente. BINARY_CHECKSUM cumple las propiedades de una función hash: si se aplica sobre dos listas de expresiones, devuelve el mismo valor si los elementos correspondientes de las dos listas tienen el mismo tipo y son iguales cuando se comparan utilizando el operador igual (=). En esta definición, se dice que la comparación de valores NULL de un tipo específico se consideran como iguales. Si al menos uno de los valores de la lista de expresiones cambia, la suma de comprobación de la expresión también puede cambiar, Sin embargo, este cambio no se garantiza, así que para detectar si los valores han cambiado, se recomienda el uso de BINARY_CHECKSUM solo si su aplicación puede tolerar la ausencia de cambio ocasional. De lo contrario, es más aconsejable usar HASHBYTES. Con un algoritmo hash MD5 especificado, la probabilidad de que HASHBYTES devuelva el mismo resultado, para dos entradas diferentes, es mucho menor en comparación con BINARY_CHECKSUM.

BINARY_CHECKSUM puede operar en una lista de expresiones y devuelve el mismo valor para una lista especificada. BINARY_CHECKSUM aplicado a dos listas de expresiones cualquiera devuelve el mismo valor si los elementos correspondientes de ambas listas tienen el mismo tipo y la misma representación de bytes. Para esta definición, los valores NULL de un tipo especificado se considera que tienen la misma representación de bytes.

BINARY_CHECKSUM y CHECKSUM son funciones similares. se pueden utilizar para calcular un valor de suma de comprobación en una lista de expresiones; el orden de las expresiones afecta al valor del resultado. El orden de las columnas usado para BINARY_CHECKSUM(*) es el orden de las columnas especificado en la definición de la tabla o la vista. Esta ordenación incluye las columnas calculadas.

BINARY_CHECKSUM y CHECKSUM devuelven valores distintos para los tipos de datos de cadena, donde la configuración regional puede hacer que cadenas con una presentación distinta se comparen como iguales. Los tipos de datos String son los siguientes:

  • char
  • nchar
  • nvarchar
  • varchar

o

  • sql_variant (si el tipo base de sql_variant es un tipo de datos String).

Por ejemplo, las cadenas "McCavity" y "Mccavity" tienen valores BINARY_CHECKSUM distintos. Por el contrario, en un servidor que no distingue entre mayúsculas y minúsculas, CHECKSUM devuelve los mismos valores de suma de comprobación para ambas cadenas. Debe evitar la comparación de valores CHECKSUM con BINARY_CHECKSUM.

BINARY_CHECKSUM admite cualquier longitud de tipo varbinary(max) y un máximo de 255 caracteres de tipo nvarchar(max).

Ejemplos

Este ejemplo utiliza BINARY_CHECKSUM para detectar cambios en una fila de tabla.

USE AdventureWorks2022;  
GO  
CREATE TABLE myTable (column1 INT, column2 VARCHAR(256));  
GO  
INSERT INTO myTable VALUES (1, 'test');  
GO  
SELECT BINARY_CHECKSUM(*) from myTable;  
GO  
UPDATE myTable set column2 = 'TEST';  
GO  
SELECT BINARY_CHECKSUM(*) from myTable;  
GO  

Vea también

Funciones de agregado (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
CHECKSUM (Transact-SQL)
HASHBYTES (Transact-SQL)