mitkä ovat erot tarkistussumman() ja BINARY_CHECKSUMIN() välillä ja milloin/mitkä ovat sopivat käyttöskenaariot?
katso seuraava blogikirjoitus, joka korostaa eroja.
CHECKSUM Functions in SQL Server 2005
lisätiedot tästä linkistä:
TARKISTUSSUMMAFUNKTIOIDEN keskeinen tarkoitus on rakentaa hash-indeksi lausekkeen tai sarakeluettelon pohjalta. Jos sanot, että käytät sitä sarakkeen laskemiseen ja tallentamiseen taulukon tasolle merkitsemään tarkistussummaa sarakkeiden yli, jotka tekevät tietueesta ainutlaatuisen taulukossa, tämä voi olla hyödyllistä määritettäessä, onko rivi muuttunut vai ei. Tätä mekanismia voidaan sitten käyttää sen sijaan, että se yhdistettäisiin kaikkien niiden sarakkeiden kanssa, jotka tekevät tietueen ainutlaatuiseksi nähdäkseen, onko tietue päivitetty vai ei. SQL Server Books Online on paljon esimerkkejä tästä pala toiminnallisuutta.
pari asiaa, joita kannattaa varoa näitä funktioita käytettäessä:
sinun on varmistettava, että sarake(t) tai ilmaisujärjestys on sama kahden vertailtavan tarkistussumman välillä, muuten arvo olisi erilainen ja johtaisi ongelmiin.
emme suosittele tarkistussumman(*) käyttöä, koska tällä tavalla syntyvä arvo perustuu taulukon määritelmän sarakejärjestykseen suoritushetkellä, joka voi helposti muuttua ajan kuluessa. Niin, nimenomaisesti määritellä sarakkeen listalle.
ole varovainen, kun lisäät datetime-datatyyppiset sarakkeet, sillä rakeisuus on 1/300 sekuntia ja pienikin vaihtelu johtaa erilaiseen tarkistussummaan. Niin, jos sinun täytyy käyttää datetime data – tyyppinen sarake, varmista, että saat tarkka päivämäärä + tunti/min. eli rakeisuuden taso, jonka haluat.
käytettävissä on kolme tarkistussummafunktiota:
tarkistussumma: tämä on kuvattu edellä.
CHECKSUM_AGG: tämä palauttaa ryhmän arvojen tarkistussumman, ja tässä tapauksessa ei oteta huomioon Null-arvoja. Tämä toimii myös uuden analyyttisen funktion ylilausekkeen kanssa SQL Server 2005: ssä.
BINARY_CHECKSUM:kuten nimestä käy ilmi, tämä palauttaa rivin tai lausekeluettelon päälle lasketun binäärisen tarkistussumman. Tarkistussumman ja BINARY_CHECKSUMIN ero on merkkijonotyypeille luodussa arvossa. Esimerkki tällaisesta erosta on “DECIPHER”: lle ja “decipher”: lle luodut arvot ovat erilaiset BINARY_CHECKSUMIN tapauksessa, mutta ne ovat samat TARKISTUSSUMMAFUNKTIOLLE (olettaen, että meillä on tapauksen epäherkkä instanssi). Toinen ero on ilmausten vertailussa. BINARY_CHECKSUM () palauttaa saman arvon, jos kahden lausekkeen alkioilla on sama tyyppi ja tavuesitys. Niin, “2Volvo Director 20” ja “3Volvo Director 30” tuottaa saman arvon, mutta tarkistussumma() funktio arvioi tyypin sekä vertaa kahta merkkijonoa ja jos ne ovat yhtä suuret, niin vain sama arvo palautetaan.
Example:STRING BINARY_CHECKSUM_USAGE CHECKSUM_USAGE------------------- ---------------------- -----------2Volvo Director 20 -1356512636 -3414654503Volvo Director 30 -1356512636 -3414538534Volvo Director 40 -1356512636 -341455363