Condividi tramite


BINARY_CHECKSUM (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Restituisce il valore di checksum binario calcolato su una riga di una tabella o su un elenco di espressioni.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Nota

Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Argomenti

*
Specifica che il calcolo viene eseguito su tutte le colonne della tabella. Nel calcolo eseguito da BINARY_CHECKSUM vengono ignorate le colonne con tipi di dati non confrontabili. I tipi di dati non confrontabili includono

  • cursor
  • Immagine
  • ntext
  • Testo
  • xml

e i tipi non confrontabili CLR (Common Language Runtime) definiti dall'utente.

expression
Espressione di qualsiasi tipo. Durante il calcolo eseguito da BINARY_CHECKSUM le espressioni di tipi di dati non confrontabili vengono ignorate.

Tipi restituiti

int

Osservazioni:

Il calcolo di BINARY_CHECKSUM(*) su qualsiasi riga di una tabella restituisce sempre lo stesso valore, a meno che la riga non venga modificata in un secondo momento. BINARY_CHECKSUM soddisfa le proprietà di una funzione hash: quando viene applicata su due qualsiasi elenchi di espressioni restituisce lo stesso valore se gli elementi corrispondenti dei due elenchi sono dello stesso tipo di dati e risultano uguali quando vengono confrontati tramite l'operatore di uguaglianza (=). In questo contesto, si dice che i valori Null di un tipo specificato vengono considerati uguali ai fini del confronto. Se almeno uno dei valori nell'elenco di espressioni cambia, anche il valore di checksum dell'espressione può cambiare. Tale cambiamento non è tuttavia garantito. Per rilevare se i valori sono stati modificati, è quindi consigliabile usare BINARY_CHECKSUM solo se l'applicazione può tollerare l'occasionale mancanza di una modifica. In caso contrario, prendere in considerazione l'uso di HASHBYTES. Con un algoritmo hash MD5 specificato, le probabilità che HASHBYTES restituisca lo stesso risultato per due input diversi sono notevolmente inferiori rispetto a BINARY_CHECKSUM.

BINARY_CHECKSUM può essere eseguito su un elenco di espressioni e restituisce lo stesso valore per un elenco specificato. Se si applica BINARY_CHECKSUM a due elenchi di espressioni, viene restituito lo stesso valore se agli elementi corrispondenti dei due elenchi sono associati lo stesso tipo di dati e la stessa rappresentazione di byte. Per questa definizione, si presume che ai valori Null di un determinato tipo sia associata la stessa rappresentazione di byte.

BINARY_CHECKSUM e CHECKSUM sono funzioni simili. Consentono infatti di calcolare un valore di checksum in un elenco di espressioni, il cui ordine determina il valore restituito. L'ordine delle colonne usate per BINARY_CHECKSUM(*) corrisponde all'ordine delle colonne specificato nella definizione della tabella o della vista, incluse le colonne calcolate.

BINARY_CHECKSUM e CHECKSUM restituiscono valori diversi per i tipi di dati stringa, in cui a seconda delle impostazioni locali le stringhe con rappresentazione diversa possono risultare uguali. I tipi di dati stringa sono

  • char
  • nchar
  • nvarchar
  • varchar

or

  • sql_variant (se il tipo di base di sql_variant è un tipo di dati stringa).

Ad esempio, le stringhe "McCavity" e "Mccavity" hanno valori BINARY_CHECKSUM diversi. In un server in cui la distinzione tra maiuscole e minuscole è irrilevante, invece, CHECKSUM restituisce gli stessi valori di checksum per queste stringhe. È consigliabile evitare il confronto di valori CHECKSUM con valori BINARY_CHECKSUM.

BINARY_CHECKSUM supporta qualsiasi lunghezza di tipo varbinary(max) e fino a 255 caratteri di tipo nvarchar(max).

Esempi

Nell'esempio seguente la funzione BINARY_CHECKSUM viene usata per rilevare le modifiche in una riga di tabella.

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  

Vedi anche

Funzioni di aggregazione (Transact-SQL)
CHECKSUM_AGG (Transact-SQL)
CHECKSUM (Transact-SQL)
HASHBYTES (Transact-SQL)