- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (toate versiunile acceptate)Azure SQL DatabaseAzure SQL gestionat instanțăAzure Synapse Analytics
returnează valoarea sumei de control calculată pe un rând de tabel sau pe o listă de expresii. Utilizați CHECKSUM
pentru a construi indici hash.
convenții de sintaxă Transact-SQL
sintaxă
CHECKSUM ( * | expression )
notă
pentru a vizualiza sintaxa Transact-SQL pentru SQL Server 2014 și versiuni anterioare, consultați documentația versiunilor anterioare.
notă
această sintaxă nu este acceptată de piscina SQL fără server în Azure Synapse Analytics.
argumente
*
acest argument specifică faptul că calculul sumei de control acoperă toate coloanele tabelului. CHECKSUM
returnează o eroare dacă orice coloană are un tip de date necomparabil. Tipurile de date necomparabile includ:
- cursor
- imagine
- ntext
- text
- XML
Un alt tip de date necomparabil este sql_variant cu oricare dintre tipurile de date precedente ca tip de bază.
Expresie
O expresie de orice tip, cu excepția unui tip de date necomparabil.
tipuri de retur
Int
observații
CHECKSUM
calculează o valoare hash, numită suma de control, peste lista sa de argumente. Utilizați această valoare hash pentru a construi indici hash. Un index hash va rezulta dacăCHECKSUM
funcția are argumente coloană, și un index este construit peste calculatCHECKSUM
valoare. Aceasta poate fi utilizată pentru căutările de egalitate pe coloane.
funcțiaCHECKSUM
satisface proprietățile funcției hash:CHECKSUM
aplicată pe oricare două liste de expresii va returna aceeași valoare, dacă elementele corespunzătoare ale celor două liste au același tip de date și dacă acele elemente corespunzătoare au egalitate în comparație cu operatorul equals ( = ). Valorile nule ale unui tip specificat sunt definite pentru a compara ca fiind egale pentruCHECKSUM
scopuri funcționale. Dacă se modifică cel puțin una dintre valorile din lista de expresii, suma de control a listei se va schimba probabil. Cu toate acestea, acest lucru nu este garantat.Prin urmare, pentru a detecta dacă valorile s-au schimbat, vă recomandăm să utilizați CHECKSUM
numai dacă aplicația dvs. poate tolera o schimbare ocazională ratată. În caz contrar, luați în considerare utilizarea HASHBYTES
în schimb. Cu un algoritm hash MD5 specificat, probabilitatea ca HASHBYTES
să returneze același rezultat, pentru două intrări diferite, este mult mai mică comparativ cuCHECKSUM
.
ordinea expresiei afectează valoarea calculatăCHECKSUM
. Ordinea coloanelor utilizate pentru CHECKSUM(*)
este ordinea coloanelor specificate în definiția tabelului sau a vizualizării. Aceasta include coloane calculate.
valoareaCHECKSUM
depinde de colaționare. Aceeași valoare stocată cu o colaționare diferită va returna o valoare CHECKSUM
diferită.
CHECKSUM ()
nu garantează rezultate unice.
Exemple
aceste exemple arată utilizareaCHECKSUM
pentru a construi indici hash.
pentru a construi indexul hash, primul exemplu adaugă o coloană de sumă de control calculată la tabelul pe care dorim să îl indexăm. Apoi construiește un index pe coloana Sumă de control.
-- 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
acest exemplu arată utilizarea unui indice de sumă de control ca indice hash. Acest lucru poate ajuta la îmbunătățirea vitezei de indexare atunci când coloana de index este o coloană de caractere lungi. Indicele sumelor de control poate fi utilizat pentru căutările de egalitate.
/*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
crearea indexului pe coloana calculată materializează coloana Sumă de control și orice modificare a valoriiProductName
se va propaga în coloana Sumă de control. Alternativ, am putea construi un index direct pe coloana pe care dorim să o indexăm. Cu toate acestea, pentru valorile cheie lungi, un indice obișnuit probabil nu va funcționa la fel de bine ca un indice de sumă de control.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)