다음을 통해 공유


CHECKSUM(Transact-SQL)

테이블의 행 또는 식의 목록에 대해 계산한 체크섬을 반환합니다. CHECKSUM 값은 해시 인덱스를 작성하는 데 사용하기 위한 것입니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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

인수

  • *
    테이블의 모든 열에 대해 계산하도록 지정합니다. CHECKSUM은 비교할 수 없는 데이터 형식인 열이 있는 경우에 오류를 반환합니다. 비교할 수 없는 데이터 형식으로는 text, ntext, image, XML, cursor가 있고 이러한 형식 중 하나를 기본 유형으로 사용하는 sql_variant도 있습니다.

  • expression
    비교할 수 없는 데이터 형식을 제외한 모든 형식의 입니다.

반환 형식

int

주의

CHECKSUM은 인수의 목록에 대해 체크섬이라고 하는 해시 값을 계산합니다. 해시 값은 해시 인덱스를 작성하는 데 사용하기 위한 것입니다. CHECKSUM에 대한 인수가 열이고 인덱스가 계산된 CHECKSUM 값을 통해 작성된 경우 결과는 해시 인덱스입니다. 이 결과는 열에 대한 등가 검색에 사용할 수 있습니다.

CHECKSUM은 해시 함수의 속성을 만족시킵니다. 식의 두 목록에 대해 적용되는 CHECKSUM은 두 목록의 해당 요소가 유형이 동일하고 등호(=) 연산자를 사용하여 비교할 때 동일한 경우 같은 값을 반환합니다. 이러한 정의에 대해 지정한 유형의 Null 값은 비교할 때 동일한 것으로 간주됩니다. 식 목록에 있는 값을 하나라도 변경하면 일반적으로 목록의 체크섬도 바뀝니다. 그러나 체크섬이 바뀌지 않는 경우도 가끔 있습니다. 이 때문에 응용 프로그램에서 변경 내용 누락이 있어서는 안 될 경우 CHECKSUM을 사용하여 값의 변경 여부를 확인하는 것은 좋지 않습니다. 대신 HashBytes를 사용하십시오. MD5 해시 알고리즘을 지정하면 HashBytes에서 두 개의 다른 입력에 대해 같은 결과를 반환할 가능성이 CHECKSUM보다 훨씬 낮습니다.

식의 순서는 CHECKSUM의 결과 값에 영향을 미칩니다. CHECKSUM(*)에 사용되는 열의 순서는 테이블 또는 뷰 정의에 지정된 열의 순서입니다. 계산 열도 마찬가지입니다.

CHECKSUM 값은 데이터 정렬에 따라 다릅니다. 같은 값이라도 다른 데이터 정렬로 저장된 경우 다른 CHECKSUM 값이 반환됩니다.

다음 예에서는 CHECKSUM을 사용하여 해시 인덱스를 작성하는 방법을 보여 줍니다. 해시 인덱스는 인덱스될 테이블에 계산된 체크섬 열을 추가한 다음 체크섬 열에서 인덱스를 만드는 방식으로 작성됩니다.

-- Create a checksum index.
SET ARITHABORT ON;
USE AdventureWorks2008R2; 
GO
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO

특히 인덱스될 열이 긴 문자 열인 경우에 인덱싱 속도를 높이기 위해 사용할 수 있습니다. 또한 등가 검색에도 체크섬 인덱스를 사용할 수 있습니다.

/*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

계산 열에 인덱스를 만들면 체크섬 열이 만들어지고 ProductName 값의 변경 사항이 체크섬 열에 전파됩니다. 또는 인덱싱된 열에 직접 인덱스를 작성할 수도 있습니다. 그러나 키 값이 긴 경우에는 일반 인덱스가 체크섬 인덱스처럼 수행되지 않을 수 있습니다.