- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (Wszystkie obsługiwane wersje)Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics
CHECKSUM
funkcja zwraca wartość sumy kontrolnej obliczoną nad wierszem tabeli lub nad listą wyrażeń. Użyj CHECKSUM
, aby zbudować indeksy skrótów.
konwencje składni Transact-SQL
składnia
CHECKSUM ( * | expression )
Uwaga
aby wyświetlić składnię Transact-SQL dla SQL Server 2014 i wcześniejszych, zobacz dokumentację poprzednich wersji.
Uwaga
ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.
argumenty
*
ten argument określa, że suma kontrolna obejmuje wszystkie kolumny tabeli. CHECKSUM
zwraca błąd, jeśli jakaś kolumna ma nieporównywalny typ danych. Nieporównywalne typy danych obejmują:
- kursor
- obraz
- ntext
- tekst
- XML
innym nieporównywalnym typem danych jest sql_variant z jednym z poprzedzających typów danych jako typem bazowym.
wyrażenie
wyrażenie dowolnego typu, z wyjątkiem nieporównywalnego typu danych.
zwraca typy
int
uwagi
CHECKSUM
oblicza wartość skrótu, zwaną sumą kontrolną, nad listą argumentów. Użyj tej wartości skrótu do budowania indeksów skrótu. Indeks skrótu zostanie wyświetlony, jeśli funkcjaCHECKSUM
ma argumenty kolumn, a indeks jest zbudowany na obliczonej wartościCHECKSUM
. Może to być użyte do wyszukiwania równości nad kolumnami.
funkcjaCHECKSUM
spełnia właściwości funkcji skrótu:CHECKSUM
zastosowana nad dowolnymi dwoma listami wyrażeń zwróci tę samą wartość, jeśli odpowiednie elementy obu list mają ten sam typ danych i jeśli te odpowiednie elementy mają równość w porównaniu za pomocą operatora equals ( = ). Wartości Null określonego typu są zdefiniowane w celu porównania jako równe dla celów funkcjiCHECKSUM
. Jeśli co najmniej jedna z wartości na liście wyrażeń ulegnie zmianie, suma kontrolna listy prawdopodobnie ulegnie zmianie. Nie jest to jednak gwarantowane.Dlatego, aby wykryć, czy wartości się zmieniły, zalecamy użycie CHECKSUM
tylko wtedy, gdy aplikacja toleruje sporadyczne pominięte zmiany. W przeciwnym razie rozważ użycie HASHBYTES
. W przypadku określonego algorytmu skrótu MD5 prawdopodobieństwo, że HASHBYTES
zwróci ten sam wynik, dla dwóch różnych wejść, jest znacznie niższe w porównaniu do CHECKSUM
.
kolejność wyrażeń wpływa na obliczoną wartośćCHECKSUM
. Kolejność kolumn zastosowana dla CHECKSUM(*)
jest kolejnością kolumn określoną w definicji tabeli lub widoku. Obejmuje to kolumny obliczeniowe.
wartość CHECKSUM
zależy od sortowania. Ta sama wartość przechowywana z innym zestawieniem zwróci inną wartość CHECKSUM
.
CHECKSUM ()
nie gwarantuje unikalnych wyników.
przykłady
te przykłady pokazują użycie CHECKSUM
do budowania indeksów skrótu.
aby zbudować indeks skrótu, pierwszy przykład dodaje obliczoną kolumnę sumy kontrolnej do tabeli, którą chcemy indeksować. Następnie tworzy indeks na kolumnie sumy kontrolnej.
-- 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
Ten przykład pokazuje użycie indeksu sumy kontrolnej jako indeksu skrótu. Może to poprawić szybkość indeksowania, gdy kolumna do indeksowania jest kolumną o długich znakach. Indeks sumy kontrolnej może być używany do wyszukiwania równości.
/*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
utworzenie indeksu na obliczonej kolumnie materializuje kolumnę sumy kontrolnej, a wszelkie zmiany wartościProductName
będą propagowane do kolumny sumy kontrolnej. Alternatywnie, możemy zbudować indeks bezpośrednio na kolumnie, którą chcemy indeksować. Jednak w przypadku długich wartości klawiszy zwykły indeks prawdopodobnie nie będzie działał tak dobrze, jak indeks sumy kontrolnej.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)