CHECKSUM (Transact-SQL)

  • 07/24/2017
  • 3 minutes to read
    • c
    • r
    • M
    • i
    • M
    • +6

Applies to: SQL Server (todas las versiones compatibles) Azure SQL Database Instancia administrada de Azure SQL Azure Synapse Analytics

El CHECKSUM la función devuelve el valor de suma de comprobación calculado sobre una fila de tabla o sobre una lista de expresiones. Utilice CHECKSUM para crear índices hash.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CHECKSUM ( * | expression ) 

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte la documentación de versiones anteriores.

Nota

Esta sintaxis no es compatible con serverless SQL piscina en Azure Sinapsis Analytics.

Argumentos

*
Este argumento especifica que el cálculo de suma de comprobación cubre todas las columnas de la tabla. CHECKSUM devuelve un error si alguna columna tiene un tipo de datos no comparable. Los tipos de datos no comparables incluyen:

  • cursor
  • imagen
  • ntext
  • texto
  • XML

Otro noncomparable tipo de datos sql_variant con cualquiera de los anteriores tipos de datos como su tipo base.

expresión
Una expresión de cualquier tipo, excepto un tipo de datos no comparable.

Devuelve tipos

int

Observaciones

CHECKSUM calcula un valor hash, llamado suma de comprobación, sobre su lista de argumentos. Utilice este valor hash para crear índices hash. Se generará un índice hash si la función CHECKSUM tiene argumentos de columna, y se construye un índice sobre el valor calculado CHECKSUM. Esto se puede usar para búsquedas de igualdad sobre las columnas.

La función CHECKSUM satisface las propiedades de la función hash: CHECKSUM aplicada sobre dos listas de expresiones devolverá el mismo valor, si los elementos correspondientes de las dos listas tienen el mismo tipo de datos, y si esos elementos correspondientes tienen igualdad cuando se comparan utilizando el operador equals ( = ). Los valores nulos de un tipo especificado se definen para comparar como iguales para los fines de la función CHECKSUM. Si al menos uno de los valores de la lista de expresiones cambia, la suma de comprobación de la lista probablemente cambiará. Sin embargo, esto no está garantizado.Por lo tanto, para detectar si los valores han cambiado, recomendamos usar CHECKSUM solo si su aplicación puede tolerar un cambio perdido ocasional. De lo contrario, considere usar HASHBYTES en su lugar. 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 CHECKSUM.

El orden de expresión afecta al valor calculado CHECKSUM. El orden de columnas utilizado para CHECKSUM(*) es el orden de columnas especificado en la definición de tabla o vista. Esto incluye columnas calculadas.

El valor CHECKSUM depende de la intercalación. El mismo valor almacenado con una intercalación diferente devolverá un valor CHECKSUM diferente.

CHECKSUM () no garantiza los resultados únicos.

Ejemplos

Estos ejemplos muestran el uso de CHECKSUM para crear índices hash.

Para construir el índice hash, el primer ejemplo agrega una columna de suma de comprobación calculada a la tabla que queremos indexar. A continuación, crea un índice en la columna suma de comprobación.

-- Create a checksum index. SET ARITHABORT ON; USE AdventureWorks2012; GO ALTER TABLE Production.Product ADD cs_Pname AS CHECKSUM(Name); GO CREATE INDEX Pname_index ON Production.Product (cs_Pname); GO 

Este ejemplo muestra el uso de un índice de suma de comprobación como índice hash. Esto puede ayudar a mejorar la velocidad de indexación cuando la columna a indexar es una columna de caracteres largos. El índice de suma de comprobación se puede usar para búsquedas de igualdad.

/*Use the index in a SELECT query. Add a second search condition to catch stray cases where checksums match, but the values are not the same.*/ SELECT * FROM Production.Product WHERE CHECKSUM(N'Bearing Ball') = cs_Pname AND Name = N'Bearing Ball'; GO 

La creación del índice en la columna calculada materializa la columna de suma de comprobación, y cualquier cambio en el valor ProductName se propagará a la columna de suma de comprobación. Alternativamente, podríamos construir un índice directamente en la columna que queremos indexar. Sin embargo, para valores de clave larga, un índice regular probablemente no funcionará tan bien como un índice de suma de comprobación.

See also

CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.