CHECKSUM (Transact-SQL)CHECKSUM (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

La función CHECKSUM devuelve el valor de la suma de comprobación calculado sobre una fila de una tabla o sobre una lista de expresiones.The CHECKSUM function returns the checksum value computed over a table row, or over an expression list. Use CHECKSUM para generar índices hash.Use CHECKSUM to build hash indexes.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

*
Este argumento especifica que el cálculo de la suma de comprobación cubre todas las columnas de la tabla.This argument specifies that the checksum computation covers all table columns. CHECKSUM devuelve un error si alguna columna tiene un tipo de datos no comparable.CHECKSUM returns an error if any column has a noncomparable data type. Entre los tipos de datos no comparables están los siguientes:Noncomparable data types include:

  • cursorcursor
  • imagenimage
  • ntextntext
  • textotext
  • XMLXML

Otro tipo de datos no comparable es sql_variant con cualquiera de los tipos de datos anteriores como tipo base.Another noncomparable data type is sql_variant with any one of the preceding data types as its base type.

expressionexpression
Una expresión de cualquier tipo, excepto un tipo de datos no comparable.An expression of any type, except a noncomparable data type.

Tipos de valores devueltosReturn types

intint

NotasRemarks

CHECKSUM calcula un valor hash, denominado suma de comprobación, sobre su lista de argumentos.CHECKSUM computes a hash value, called the checksum, over its argument list. Use este valor hash para generar índices hash.Use this hash value to build hash indexes. Se generará un índice hash si la función CHECKSUM tiene argumentos de columna y se crea un índice sobre el valor CHECKSUM calculado.A hash index will result if the CHECKSUM function has column arguments, and an index is built over the computed CHECKSUM value. Éste se puede utilizar para búsquedas de igualdades sobre las columnas.This can be used for equality searches over the columns.

La función CHECKSUM cumple las propiedades de una función hash: si se aplica CHECKSUM sobre dos listas de expresiones, se devolverá el mismo valor si los elementos correspondientes de ambas listas tienen el mismo tipo de datos y estos elementos son iguales cuando se comparan con el operador igual (=).The CHECKSUM function satisfies hash function properties: CHECKSUM applied over any two lists of expressions will return the same value, if the corresponding elements of the two lists have the same data type, and if those corresponding elements have equality when compared using the equals (=) operator. Se definen valores NULL de un tipo especificado para compararse como iguales con fines de la función CHECKSUM.Null values of a specified type are defined to compare as equal for CHECKSUM function purposes. Si al menos uno de los valores de la lista de expresiones cambia, la suma de comprobación de la lista probablemente cambiará,If at least one of the values in the expression list changes, the list checksum will probably change. aunque dicho extremo no está garantizado.However, this is not guaranteed. Por lo tanto, para detectar si los valores han cambiado, se recomienda usar CHECKSUM solo si su aplicación puede tolerar una posible ausencia de cambio.Therefore, to detect whether values have changed, we recommend use of CHECKSUM only if your application can tolerate an occasional missed change. De lo contrario, es más aconsejable usar HASHBYTES.Otherwise, consider using HASHBYTES instead. Con un algoritmo hash MD5 específico, la probabilidad de que HASHBYTES devuelva el mismo resultado (de dos entradas diferentes) es mucho menor en comparación con CHECKSUM.With a specified MD5 hash algorithm, the probability that HASHBYTES will return the same result, for two different inputs, is much lower compared to CHECKSUM.

El orden de las expresiones afecta al valor CHECKSUM calculado.The expression order affects the computed CHECKSUM value. El orden de las columnas usado para CHECKSUM(*) es el orden de las columnas especificado en la definición de la tabla o la vista.The order of columns used for CHECKSUM(*) is the order of columns specified in the table or view definition. Esto incluye las columnas calculadas.This includes computed columns.

El valor de CHECKSUM depende de la intercalación.The CHECKSUM value depends on the collation. El mismo valor almacenado con una intercalación diferente devolverá un valor de CHECKSUM diferente.The same value stored with a different collation will return a different CHECKSUM value.

CHECKSUM () no garantiza resultados únicos.CHECKSUM () does not guarantee unique results.

EjemplosExamples

En estos ejemplos se muestra el uso de CHECKSUM para generar índices hash.These examples show the use of CHECKSUM to build hash indexes.

Para crear el índice hash, en el primer ejemplo se agrega una columna de suma de comprobación calculada a la tabla que se quiere indizar.To build the hash index, the first example adds a computed checksum column to the table we want to index. Luego se crea un índice en la columna de la suma de comprobación.It then builds an index on the checksum column.

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

En este ejemplo se muestra el uso de un índice de suma de comprobación como índice hash.This example shows the use of a checksum index as a hash index. Esto puede ayudar a mejorar la velocidad de indización cuando la columna que se quiere indizar es una columna de cadenas largas de caracteres.This can help improve indexing speed when the column to index is a long character column. El índice de suma de comprobación se puede utilizar para búsquedas de igualdades.The checksum index can be used for equality searches.

/*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 se materializa en la columna de suma de comprobación y cualquier cambio en el valor de ProductName se propagará a la columna de suma de comprobación.Index creation on the computed column materializes the checksum column, and any changes to the ProductName value will propagate to the checksum column. Como alternativa se puede crear un índice directamente en la columna que se quiere indizar,Alternatively, we could build an index directly on the column we want to index. aunque para los valores de clave largos es probable que un índice normal no se comporte tan bien como un índice de suma de comprobación.However, for long key values, a regular index will probably not perform as well as a checksum index.

Vea tambiénSee also

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