CHECKSUM (Transact-SQL)

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

  • ntext
  • text
  • XML

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)

Vastaa

Sähköpostiosoitettasi ei julkaista.