다음을 통해 공유


CLR 사용자 정의 집계에 대한 요구 사항

적용 대상:SQL Server

CLR(공용 언어 런타임) 어셈블리의 형식은 필요한 집계 계약을 구현하는 한 사용자 정의 집계 함수로 등록할 수 있습니다. 이 계약은 SqlUserDefinedAggregate 특성 및 집계 계약 메서드로 구성됩니다. 집계 계약에는 집계의 중간 상태를 저장하는 메커니즘과 Init, Accumulate, MergeTerminate네 가지 메서드로 구성된 새 값을 누적하는 메커니즘이 포함됩니다. 이러한 요구 사항을 충족하면 SQL Server에서 사용자 정의 집계를 최대한 활용할 수 있습니다. 이 문서에서는 사용자 정의 집계를 만들고 사용하는 방법에 대한 자세한 정보를 제공합니다. 예제는 CLR 사용자 정의 집계 함수호출을 참조하세요.

자세한 내용은 SqlUserDefinedAggregateAttribute를 참조하세요.

집계 메서드

사용자 정의 집계로 등록된 클래스는 다음과 같은 인스턴스 메서드를 지원해야 합니다. 쿼리 프로세서는 다음 메서드를 사용하여 집계를 계산합니다.

Init 메서드

통사론:

public void Init();

쿼리 프로세서는 이 메서드를 사용하여 집계 계산을 초기화합니다. 이 메서드는 쿼리 프로세서가 집계하는 각 그룹에 대해 한 번 호출됩니다. 쿼리 프로세서는 여러 그룹의 집계를 계산하기 위해 집계 클래스의 동일한 인스턴스를 다시 사용하도록 선택할 수 있습니다. Init 메서드는 이 인스턴스의 이전 사용에서 필요에 따라 정리를 수행하고 새 집계 계산을 다시 시작할 수 있도록 해야 합니다.

Accumulate 메서드

통사론:

public void Accumulate(input-type value[, input-type value, ...]);

함수의 매개 변수를 나타내는 하나 이상의 매개 변수입니다. input_typeCREATE AGGREGATE 문의 input_sqltype 지정한 네이티브 SQL Server 데이터 형식과 동일한 관리되는 SQL Server 데이터 형식이어야 합니다. 자세한 내용은 Map CLR 매개 변수 데이터참조하세요.

UDT(사용자 정의 형식)의 경우 input-type이 UDT 형식과 동일합니다. 쿼리 프로세서는 이 메서드를 사용하여 집계 값을 누적시킵니다. 이 메서드는 집계되는 그룹의 각 값에 대해 한 번씩 호출됩니다. 쿼리 프로세서는 항상 집계 클래스의 지정된 인스턴스에서 Init 메서드를 호출한 후에만 호출합니다. 이 메서드 구현은 전달되는 인수 값의 누적을 반영하도록 인스턴스 상태를 업데이트해야 합니다.

Merge 메서드

통사론:

public void Merge(udagg_class value);

이 메서드를 사용하여 이 집계 클래스의 다른 인스턴스를 현재 인스턴스와 병합할 수 있습니다. 쿼리 프로세서는 이 메서드를 사용하여 집계의 여러 부분 계산을 병합합니다.

Terminate 메서드

통사론:

public return_type Terminate();

이 메서드는 집계 계산을 완료하고 집계 결과를 반환합니다. return_typeCREATE AGGREGATE 문에 지정된 return_sqltype 관리되는 SQL Server 데이터 형식이어야 합니다. return_type 사용자 정의 형식일 수도 있습니다.