CHECKSUM (Transact-SQL)

  • 07/24/2017
  • 3 minutes to read
    • c
    • r
    • M
    • i
    • M
    • +6

Applies to: SQL Server (minden támogatott verzió) Azure SQL Database Azure SQL felügyelt példány Azure Synapse Analytics

a CHECKSUM függvény az ellenőrző összeg kiszámított egy táblázat sor, vagy egy kifejezés lista. Használja CHECKSUM hash indexek létrehozásához.

Transact-SQL szintaxis konvenciók

szintaxis

CHECKSUM ( * | expression ) 

Megjegyzés

az SQL Server 2014 és korábbi verzióinak Transact-SQL szintaxisának megtekintéséhez lásd a korábbi verziók dokumentációját.

Megjegyzés

ezt a szintaxist az Azure Synapse Analytics szerver nélküli SQL-készlete nem támogatja.

argumentumok

*
Ez az argumentum megadja, hogy az ellenőrző összeg kiszámítása az összes táblázat oszlopát lefedi. CHECKSUM hibát ad vissza, ha bármely oszlop nem összehasonlítható adattípussal rendelkezik. A nem összehasonlítható adattípusok a következők:

  • cursor
  • image
  • ntext
  • text
  • XML

egy másik nem összehasonlítható adattípus az sql_variant, amelynek alaptípusa az előző adattípusok bármelyike.

kifejezés
bármilyen típusú kifejezés, kivéve a nem összehasonlítható adattípust.

visszatérési típusok

int

Megjegyzések

CHECKSUM kiszámítja az ellenőrző összegnek nevezett hash értéket az argumentumlistáján. Használja ezt a hash értéket hash indexek készítéséhez. A hash index akkor jön létre, ha a CHECKSUM függvény oszlop argumentumokkal rendelkezik, és egy index épül fel a kiszámított CHECKSUM értékre. Ezt fel lehet használni az oszlopok közötti egyenlőség keresésére.

a CHECKSUMfüggvény megfelel a hash függvény tulajdonságainak: CHECKSUM a kifejezések bármely két listájára alkalmazva ugyanazt az értéket adja vissza, ha a két lista megfelelő elemei azonos adattípusúak, és ha a megfelelő elemek egyenlőséggel rendelkeznek az equals (=) operátorral összehasonlítva. Egy adott típus Null értékeit úgy definiáljuk, hogy egyenlőként hasonlítsuk össze CHECKSUM függvény célokra. Ha a kifejezéslista legalább egy értéke megváltozik, a lista ellenőrző összege valószínűleg megváltozik. Ez azonban nem garantált.Ezért annak észleléséhez, hogy az értékek megváltoztak-e, javasoljuk a CHECKSUM használatát csak akkor, ha az alkalmazás képes elviselni az alkalmi kihagyott változásokat. Ellenkező esetben fontolja meg a HASHBYTES használatát. Egy megadott MD5 hash algoritmussal annak a valószínűsége, hogy a HASHBYTES ugyanazt az eredményt adja vissza két különböző bemenet esetén, sokkal alacsonyabb, mint a CHECKSUM.

a kifejezés sorrendje befolyásolja a számított CHECKSUM értéket. A CHECKSUM(*) oszlopokhoz használt oszlopok sorrendje a táblázat vagy nézetdefinícióban megadott oszlopok sorrendje. Ez magában foglalja a számított oszlopokat.

a CHECKSUM érték az összevetés függvénye. Ugyanaz az érték, amelyet egy másik összevetés tárol, egy másik CHECKSUM értéket ad vissza.

CHECKSUM () nem garantálja az egyedi eredményeket.

példák

ezek a példák aCHECKSUM használatát mutatják be hash indexek készítéséhez.

a hash index felépítéséhez az első példa hozzáad egy számított ellenőrző összeg oszlopot az indexelni kívánt táblához. Ezután indexet épít az ellenőrző összeg oszlopra.

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

Ez a példa egy ellenőrző összeg index használatát mutatja be hash indexként. Ez javíthatja az indexelési sebességet, ha az indexelés oszlop hosszú karakter oszlop. Az ellenőrző összeg index használható egyenlőség keresések.

/*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 

Index létrehozása a számított oszlopban materializálja az ellenőrző összeg oszlopot, és a ProductName érték bármilyen változása továbbterjed az ellenőrző összeg oszlopra. Alternatív megoldásként indexet építhetünk közvetlenül az indexelni kívánt oszlopra. Hosszú kulcsértékek esetén azonban a rendszeres index valószínűleg nem fog olyan jól teljesíteni, mint az ellenőrző összeg indexe.

See also

CHECKSUM_AGG (Transact-SQL)
HASHBYTES (Transact-SQL)
BINARY_CHECKSUM (Transact-SQL)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.