다음을 통해 공유


BINARY_CHECKSUM(Transact-SQL)

적용 대상:SQL 서버Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric 의 SQL 분석 엔드포인트Microsoft Fabric 의 웨어하우스Microsoft Fabric의 SQL 데이터베이스

테이블 행이나 식 목록에 대해 계산한 이진 체크섬 값을 반환합니다.

Transact-SQL 구문 표기 규칙

Syntax

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

참고

이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

인수

*

모든 테이블 열이 계산에 포함되도록 지정합니다. BINARY_CHECKSUM 계산 시 비교 불가능한 데이터 타입의 열은 무시합니다. 비교 불가능한 데이터 타입은 다음과 같습니다:

  • cursor
  • image
  • ntext
  • text
  • xml
  • 비비교 공통 언어 런타임(CLR) 사용자 정의 타입

expression

모든 형식의 입니다. BINARY_CHECKSUM 계산 시 비교 불가능한 데이터 타입의 표현식은 무시합니다.

반환 형식

int

설명

테이블의 행에 대해 계산한 BINARY_CHECKSUM(*)은 나중에 행을 수정하지 않은 경우 같은 값을 반환합니다. BINARY_CHECKSUM 해시 함수의 특성을 만족합니다: 임의의 두 표현식 리스트에 적용할 때, 두 리스트의 해당 요소들이 같은 타입을 가지며 equals (=) 연산자를 사용해 비교했을 때 동일한 값을 반환합니다.

이러한 정의에서는 지정된 유형의 Null 값은 동일한 값으로 비교됩니다. 식 목록에 있는 값 중 하나 이상이 변경되면 식 체크섬도 변경될 수 있습니다. 하지만 이 변경이 보장되는 것은 아니므로, 값이 변경되었는지 감지하려면 애플리케이션이 가끔 누락된 변경을 견딜 수 있을 때만 사용해야 BINARY_CHECKSUM 합니다. 그렇지 않으면 HASHBYTES를 대신 사용하는 것이 좋습니다. 지정된 MD5 해시 알고리즘을 사용할 때, 두 가지 다른 입력에서 동일한 결과를 반환할 HASHBYTES 확률은 보다 훨씬 낮 BINARY_CHECKSUM아집니다.

BINARY_CHECKSUM은 식 목록에 대해 작동할 수 있으며 지정된 목록에 대해 같은 값을 반환합니다. 식의 두 목록에 대해 적용되는 BINARY_CHECKSUM은 두 목록의 해당 요소가 유형 및 바이트 표현에서 동일할 경우 같은 값을 반환합니다. 이러한 정의에서 지정된 유형의 Null 값은 바이트 표현이 동일한 것으로 간주됩니다.

BINARY_CHECKSUMCHECKSUM은 유사한 함수입니다. 식 목록에 대해 체크섬 값을 계산하는 데 사용할 수 있고 식 순서가 결과 값에 영향을 미칩니다. BINARY_CHECKSUM(*)에 사용되는 열의 순서는 테이블 또는 뷰 정의에 지정된 열의 순서입니다. 이 순서에는 계산 열이 포함됩니다.

BINARY_CHECKSUMCHECKSUM은 문자열 데이터 형식에 대해 서로 다른 값을 반환합니다. 여기서 로캘은 표현이 서로 다른 문자열을 동일하게 비교할 수 있습니다. 문자열 데이터 유형은 다음과 같습니다:

  • char
  • nchar
  • nvarchar
  • varchar
  • sql_variant ( sql_variant 의 기본 타입이 문자열 데이터 타입일 경우)

예를 들어, 문자열 McCavityMccavity 는 서로 다른 BINARY_CHECKSUM 값을 가집니다. 그러나 대소문자를 구분하지 않는 서버의 경우 CHECKSUM은 해당 문자열에 대해 같은 체크섬 값을 반환합니다. CHECKSUM 값과 BINARY_CHECKSUM 값의 비교는 피해야 합니다.

BINARY_CHECKSUM 모든 길이의 varbinary(max) 타입과 최대 255개의 nvarchar(n) / nvarchar(max) 타입을 지원합니다.

예제

이 예에서는 BINARY_CHECKSUM을 사용하여 테이블 행의 변경 내용을 검색합니다.

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