CHECKSUM (Transact-SQL)

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.