CHECKSUM(Transact-SQL)
테이블의 행 또는 식의 목록에 대해 계산한 체크섬을 반환합니다. CHECKSUM 값은 해시 인덱스를 작성하는 데 사용하기 위한 것입니다.
구문
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 값의 변경 사항이 체크섬 열에 전파됩니다. 또는 인덱싱된 열에 직접 인덱스를 작성할 수도 있습니다. 그러나 키 값이 긴 경우에는 일반 인덱스가 체크섬 인덱스처럼 수행되지 않을 수 있습니다.