CHECKSUM (Transact-SQL)

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.