- 07/24/2017
- 3 minutes to read
-
- c
- r
- M
- i
- M
-
+6
Applies to: SQL Server (kaikki tuetut versiot) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
the palauttaa taulukon rivin tai lausekeluettelon päälle lasketun tarkistussumman. Käytä CHECKSUM
hash-indeksien muodostamiseen.
Transact-SQL-Syntaksikonventiot
syntaksi
CHECKSUM ( * | expression )
Huomautus
nähdäksesi Transact-SQL-syntaksin SQL Server 2014-palvelimelle ja sitä aiemmin, Katso aikaisempien versioiden dokumentaatio.
Huomautus
tätä syntaksia ei tue Azure Synapse Analyticsin serverless SQL pool.
argumentit
*
tämä argumentti määrittää, että tarkistussumman laskenta kattaa kaikki taulukon sarakkeet. CHECKSUM
palauttaa virheen, jos jollakin sarakkeella on vertailematon tietotyyppi. Vertailemattomia tietotyyppejä ovat:
- kohdistin
- ntext
- text
- XML
image
toinen vertailematon tietotyyppi on sql_variant, jonka kantatyyppinä on jokin edeltävistä tietotyypeistä.
lauseke
minkä tahansa tyyppinen lauseke, paitsi ei-vertaileva tietotyyppi.
Palautustyypit
int
huomautukset
CHECKSUM
laskee parametrilistansa päälle hash-arvon, jota kutsutaan tarkistussummaksi. Käytä tätä hajautusarvoa hajautusindeksien muodostamiseen. Hash-indeksi saadaan, jos CHECKSUM
funktiolla on sarakeargumentit, ja lasketun CHECKSUM
arvon päälle rakennetaan indeksi. Tätä voi käyttää tasa-arvohakuihin palstoilla.
CHECKSUM
funktio täyttää hash-funktion ominaisuudet: CHECKSUM
sovellettuna mille tahansa kahdelle lausekeluettelolle palauttaa saman arvon, jos kahden luettelon vastaavilla elementeillä on sama tietotyyppi, ja jos nämä vastaavat elementit ovat tasa-arvoisia, kun niitä verrataan käyttäen equals ( = ) – operaattoria. Tietyn tyypin Null-arvot määritellään vertaamaan yhtä suuriksi CHECKSUM
funktion tarkoituksia varten. Jos ainakin yksi lausekeluettelon arvoista muuttuu, luettelon tarkistussumma todennäköisesti muuttuu. Tästä ei kuitenkaan ole takeita.Siksi arvojen muuttumisen havaitsemiseksi suosittelemme CHECKSUM
käyttöä vain, jos sovelluksesi voi sietää satunnaista puuttuvaa muutosta. Muussa tapauksessa kannattaa harkita HASHBYTES
käyttöä sen sijaan. Määritellyllä MD5-hajautusalgoritmilla todennäköisyys, että HASHBYTES
palauttaa saman tuloksen kahden eri tulon osalta, on paljon pienempi kuin CHECKSUM
.
lausekejärjestys vaikuttaa laskettuun CHECKSUM
arvoon. CHECKSUM(*)
sarakkeiden järjestys on taulukossa tai näkymän määritelmässä määritelty sarakkeiden järjestys. Tämä sisältää lasketut sarakkeet.
CHECKSUM
arvo riippuu vertailusta. Sama eri vertailulla tallennettu arvo palauttaa eri CHECKSUM
arvo.
CHECKSUM ()
ei takaa ainutkertaisia tuloksia.
esimerkit
nämä esimerkit osoittavat CHECKSUM
käytön hash-indeksien muodostamiseen.
hash-indeksin muodostamiseksi ensimmäinen esimerkki lisää indeksoitavaan taulukkoon lasketun tarkistussumman sarakkeen. Tämän jälkeen se muodostaa tarkistussummasarakkeeseen indeksin.
-- 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
Tämä esimerkki osoittaa tarkistussummaindeksin käytön hash-indeksinä. Tämä voi auttaa parantamaan indeksoinnin nopeutta, kun sarake indeksiin on pitkä merkki sarake. Tarkistussummaindeksiä voidaan käyttää tasa-arvohakuihin.
/*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
indeksin luominen laskettuun sarakkeeseen realisoi tarkistussummasarakkeen, ja kaikki muutokset ProductName
arvo etenee tarkistussummasarakkeeseen. Vaihtoehtoisesti voisimme rakentaa indeksin suoraan sille sarakkeelle, jonka haluamme indeksoida. Pitkien avainarvojen kohdalla säännöllinen indeksi ei kuitenkaan todennäköisesti toimi yhtä hyvin kuin tarkistussummaindeksi.
See also
CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)