- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (tutte le versioni supportate) Azure SQL Database Azure SQL Istanza Gestita Azure Sinapsi Analytics
CHECKSUM
funzione restituisce il valore di checksum calcolato su una riga della tabella, o su un elenco di espressioni. UsaCHECKSUM
per creare indici hash.
Convenzioni di sintassi Transact-SQL
Sintassi
CHECKSUM ( * | expression )
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere la documentazione delle versioni precedenti.
Nota
Questa sintassi non è supportata dal pool SQL serverless in Azure Synapse Analytics.
Argomenti
*
Questo argomento specifica che il calcolo del checksum copre tutte le colonne della tabella. CHECKSUM
restituisce un errore se una colonna ha un tipo di dati non comparabile. I tipi di dati non comparabili includono:
- cursore
- immagine
- ntext
- testo
- XML
Un altro tipo di dati non comparabile è sql_variant con uno qualsiasi dei tipi di dati precedenti come tipo di base.
espressione
Un’espressione di qualsiasi tipo, ad eccezione di un tipo di dati non comparabili.
Return types
int
Remarks
CHECKSUM
calcola un valore hash, chiamato checksum, sulla sua lista di argomenti. Utilizzare questo valore hash per creare indici hash. Un indice hash risulterà se la funzioneCHECKSUM
ha argomenti di colonna e un indice viene creato sul valoreCHECKSUM
calcolato. Questo può essere usato per ricerche di uguaglianza sulle colonne.
La funzione CHECKSUM
soddisfa le proprietà della funzione hash: CHECKSUM
applicata su due liste di espressioni restituirà lo stesso valore, se gli elementi corrispondenti delle due liste hanno lo stesso tipo di dati e se questi elementi corrispondenti hanno uguaglianza se confrontati usando l’operatore equals ( = ). I valori null di un tipo specificato sono definiti per essere confrontati come uguali per gli scopi della funzioneCHECKSUM
. Se almeno uno dei valori nell’elenco delle espressioni cambia, il checksum dell’elenco probabilmente cambierà. Tuttavia, questo non è garantito.Pertanto, per rilevare se i valori sono stati modificati, si consiglia di utilizzare CHECKSUM
solo se l’applicazione può tollerare una modifica saltata occasionale. In caso contrario, considerare l’utilizzo di HASHBYTES
. Con un algoritmo hash MD5 specificato, la probabilità cheHASHBYTES
restituisca lo stesso risultato, per due input diversi, è molto più bassa rispetto aCHECKSUM
.
L’ordine delle espressioni influisce sul valoreCHECKSUM
calcolato. L’ordine delle colonne utilizzato per CHECKSUM(*)
è l’ordine delle colonne specificato nella definizione della tabella o della vista. Questo include colonne calcolate.
Il valore CHECKSUM
dipende dalle regole di confronto. Lo stesso valore memorizzato con un confronto diverso restituirà un valore CHECKSUM
diverso.
CHECKSUM ()
non garantisce risultati univoci.
Esempi
Questi esempi mostrano l’uso diCHECKSUM
per costruire indici hash.
Per costruire l’indice hash, il primo esempio aggiunge una colonna di checksum calcolata alla tabella che vogliamo indicizzare. Quindi crea un indice sulla colonna checksum.
-- 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
Questo esempio mostra l’uso di un indice di checksum come indice hash. Ciò può aiutare a migliorare la velocità di indicizzazione quando la colonna all’indice è una colonna di caratteri lunghi. L’indice di checksum può essere utilizzato per le ricerche di uguaglianza.
/*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 creazione dell’indice sulla colonna calcolata materializza la colonna checksum e qualsiasi modifica al valoreProductName
si propagherà alla colonna checksum. In alternativa, potremmo costruire un indice direttamente sulla colonna che vogliamo indicizzare. Tuttavia, per i valori chiave lunghi, un indice regolare probabilmente non funzionerà così come un indice di checksum.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)