Compartir a través de


BINARY_CHECKSUM (Transact-SQL)

Aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint de analítica SQL en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL 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 ignora columnas de tipos de datos no comparables en su cálculo. Tipos de datos no comparables incluyen:

  • cursor
  • image
  • ntext
  • text
  • xml
  • Tipos definidos por el usuario en tiempo de ejecución de lenguaje común (CLR) no comparables

expression

Una expresión de cualquier tipo. BINARY_CHECKSUM ignora expresiones de tipos de datos no comparables en su cálculo.

Tipos de retorno

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 satisface las propiedades de una función hash: cuando se aplica sobre dos listas cualesquiera de expresiones, devuelve el mismo valor si los elementos correspondientes de las dos listas tienen el mismo tipo y son iguales al compararse usando el operador iguales (=).

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 está garantizado, por lo que para detectar si los valores han cambiado, solo debes usarlo BINARY_CHECKSUM si tu aplicación puede tolerar algún cambio ocasionalmente omitido. 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 que 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 de cadena son:

  • char
  • nchar
  • nvarchar
  • varchar
  • sql_variant (si el tipo base de sql_variant es un tipo de dato de cadena)

Por ejemplo, las cadenas McCavity y Mccavity tienen valores diferentes BINARY_CHECKSUM . 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_CHECKSUMSoporta cualquier longitud de tipo varbinary(max) y hasta 255 caracteres de tipo nvarchar(n) / 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