Udostępnij za pomocą


BINARY_CHECKSUM (Transact-SQL)

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint analityki SQL w Microsoft FabricMagazyn w Microsoft FabricBaza danych SQL w Microsoft Fabric

Zwraca binarną sumę kontrolną obliczoną na podstawie wiersza tabeli lub listy wyrażeń.

Transact-SQL konwencje składni

Składnia

BINARY_CHECKSUM ( * | expression [ , ...n ] )

Uwaga / Notatka

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Arguments

*

Określa, że obliczenia obejmują wszystkie kolumny tabeli. BINARY_CHECKSUM ignoruje kolumny nieporównywalnych typów danych podczas obliczeń. Nieporównywalne typy danych obejmują:

  • kursor
  • image
  • ntext
  • tekst
  • xml
  • Nieporównywalne typy wykonawcze w języku Common Language (CLR) zdefiniowane przez użytkownika

expression

Wyrażenie dowolnego typu. BINARY_CHECKSUM ignoruje wyrażenia nieporównywalnych typów danych podczas obliczeń.

Typy zwracane

int

Uwagi

BINARY_CHECKSUM(*), obliczona na dowolnym wierszu tabeli, zwraca tę samą wartość, o ile wiersz nie zostanie później zmodyfikowany. BINARY_CHECKSUM spełnia właściwości funkcji skrótu: gdy jest zastosowana na dowolnych dwóch listach wyrażeń, zwraca tę samą wartość, jeśli odpowiadające im elementy mają ten sam typ i są równe przy porównaniu z operatorem równości (=).

Dla tej definicji mówimy, że wartości zerowe określonego typu są porównywalne jako równe wartości. Jeśli przynajmniej jedna z wartości na liście wyrażeń się zmieni, suma kontrolna wyrażenia również może się zmienić. Jednak ta zmiana nie jest gwarantowana, więc aby wykryć, czy wartości się zmieniły, powinieneś używać BINARY_CHECKSUM tylko wtedy, gdy Twoja aplikacja toleruje okazjonalne pominięcie zmiany. W przeciwnym razie rozważ użycie HASHBYTES zamiast tego. Przy określonym algorytmie skrótu MD5 prawdopodobieństwo, że HASHBYTES zwróci ten sam wynik dla dwóch różnych wejść, jest znacznie niższe niż .BINARY_CHECKSUM

BINARY_CHECKSUM może działać nad listą wyrażeń i zwraca tę samą wartość dla określonej listy. BINARY_CHECKSUM zastosowane na dowolnych dwóch listach wyrażeń zwracają tę samą wartość, jeśli odpowiadające im elementy mają ten sam typ i reprezentację bajtów. W tej definicji wartości zerowe określonego typu uważa się za mające tę samą reprezentację bajtów.

BINARY_CHECKSUM i CHECKSUM mają podobne funkcje. Mogą one być używane do obliczania wartości sumy kontrolnej na liście wyrażeń, a kolejność wyrażeń wpływa na wartość końcową. Kolejność kolumn używana dla BINARY_CHECKSUM(*) to kolejność kolumn określona w definicji tabeli lub widoku. To porządkowanie obejmuje kolumny obliczane.

BINARY_CHECKSUM oraz CHECKSUM zwracają różne wartości dla typów danych łańcuchów, gdzie lokalizacja może powodować porównywanie ciągów o różnej reprezentacji jako równych. Typy danych ciągów to:

  • Char
  • nchar
  • nvarchar
  • varchar
  • sql_variant (jeśli bazowym typem sql_variant jest typ danych ciągu danych)

Na przykład stringi McCavity i Mccavity mają różne BINARY_CHECKSUM wartości. Natomiast dla serwera nierozróżniającego wielkość liter zwraca CHECKSUM te same wartości sumy kontrolnej dla tych ciągów znaków. Powinieneś unikać porównywania CHECKSUM wartości z wartościami BINARY_CHECKSUM .

BINARY_CHECKSUMobsługuje dowolną długość typu varbinary(max) oraz do 255 znaków typu nvarchar(n) / nvarchar(max).

Przykłady

Ten przykład służy BINARY_CHECKSUM do wykrywania zmian w wierszu tabeli.

USE AdventureWorks2022;
GO

CREATE TABLE myTable (column1 INT, column2 VARCHAR (256));
GO

INSERT INTO myTable VALUES (1, 'test');
GO

SELECT BINARY_CHECKSUM(*) FROM myTable;
GO

UPDATE myTable SET column2 = 'TEST';
GO

SELECT BINARY_CHECKSUM(*) FROM myTable;
GO