- 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 CHECKSUM
fü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)