- 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)