CHECKSUM (Transact-SQL)

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

Lasă un răspuns

Adresa ta de email nu va fi publicată.