적용 대상:SQL 서버
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric
의 SQL 분석 엔드포인트Microsoft Fabric
의 웨어하우스Microsoft Fabric의 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_CHECKSUM 및 CHECKSUM은 유사한 함수입니다. 식 목록에 대해 체크섬 값을 계산하는 데 사용할 수 있고 식 순서가 결과 값에 영향을 미칩니다.
BINARY_CHECKSUM(*)에 사용되는 열의 순서는 테이블 또는 뷰 정의에 지정된 열의 순서입니다. 이 순서에는 계산 열이 포함됩니다.
BINARY_CHECKSUM 및 CHECKSUM은 문자열 데이터 형식에 대해 서로 다른 값을 반환합니다. 여기서 로캘은 표현이 서로 다른 문자열을 동일하게 비교할 수 있습니다. 문자열 데이터 유형은 다음과 같습니다:
- char
- nchar
- nvarchar
- varchar
- sql_variant ( sql_variant 의 기본 타입이 문자열 데이터 타입일 경우)
예를 들어, 문자열 McCavity 과 Mccavity 는 서로 다른 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