다음을 통해 공유


CLR 사용자 정의 집계 요구 사항

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

SqlUserDefinedAggregate

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

집계 메서드

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

메서드 문법 설명
Init public void Init(); 쿼리 프로세서는 이 메서드를 사용하여 집계 계산을 초기화합니다. 이 메서드는 쿼리 프로세서가 집계하는 각 그룹에 대해 한 번 호출됩니다. 쿼리 프로세서는 여러 그룹의 집계를 계산하기 위해 집계 클래스의 동일한 인스턴스를 다시 사용하도록 선택할 수 있습니다. 이 메서드는 Init 이 인스턴스의 이전 사용에서 필요에 따라 정리를 수행하고 새 집계 계산을 다시 시작할 수 있도록 해야 합니다.
Accumulate public void Accumulate ( input-type value[, input-type value, ...]); 함수의 매개 변수를 나타내는 하나 이상의 매개 변수입니다. input_type 문의 CREATE AGGREGATE 지정한 네이티브 SQL Server 데이터 형식과 동일한 관리되는 SQL Server 데이터 형식이어야 합니다. 자세한 내용은 CLR 매개 변수 데이터 매핑을 참조하세요.

UDT(사용자 정의 형식)의 경우 input-type이 UDT 형식과 동일합니다. 쿼리 프로세서는 이 메서드를 사용하여 집계 값을 누적시킵니다. 이 메서드는 집계되는 그룹의 각 값에 대해 한 번씩 호출됩니다. 쿼리 프로세서는 항상 집계 클래스의 지정된 인스턴스에서 Init 메서드를 호출한 후에만 호출합니다. 이 메서드 구현은 전달되는 인수 값의 누적을 반영하도록 인스턴스 상태를 업데이트해야 합니다.
Merge public void Merge( udagg_class value); 이 메서드를 사용하여 이 집계 클래스의 다른 인스턴스를 현재 인스턴스와 병합할 수 있습니다. 쿼리 프로세서는 이 메서드를 사용하여 집계의 여러 부분 계산을 병합합니다.
Terminate public return_type Terminate(); 이 메서드는 집계 계산을 완료하고 집계 결과를 반환합니다. return_type 문에 지정된 CREATE AGGREGATE 관리되는 SQL Server 데이터 형식이어야 합니다. return_type 사용자 정의 형식일 수도 있습니다.

Table-Valued 매개 변수

프로시저 또는 함수로 전달되는 사용자 정의 테이블 형식인 TVP(테이블 반환 매개 변수)를 사용하면 여러 개의 데이터 행을 서버로 편리하게 전달할 수 있습니다. TVP는 매개 변수 배열과 유사한 기능을 제공하지만 Transact-SQL과 더 유연하고 긴밀한 통합을 제공합니다. 또한 성능도 향상될 수 있습니다. 또한 TVP는 서버 왕복 횟수를 줄이는 데 도움이 될 수 있습니다. 스칼라 매개 변수 목록과 같이 여러 요청을 서버에 보내는 대신 데이터를 서버에 TVP로 보낼 수 있습니다. 사용자 정의 테이블 형식은 SQL Server 프로세스에서 실행되는 관리되는 저장 프로시저 또는 함수에 테이블 반환 매개 변수로 전달되거나 반환될 수 없습니다. 또한 컨텍스트 연결 범위 내에서는 TVP를 사용할 수 없습니다. 그러나 컨텍스트 연결이 아닌 연결에서 사용되는 경우 SQL Server 프로세스에서 실행되는 관리되는 저장 프로시저 또는 함수에서 SQLClient와 함께 TVP를 사용할 수 있습니다. 관리 프로시저 또는 함수를 실행하는 동일한 서버에 연결할 수 있습니다. TVP에 대한 자세한 내용은 Table-Valued 매개 변수 사용(데이터베이스 엔진)을 참조하세요.

변경 기록

업데이트된 내용
메서드에 대한 설명을 업데이트했습니다 Accumulate . 이제 둘 이상의 매개 변수를 허용합니다.

또한 참조하십시오

CLR User-Defined 형식
CLR User-Defined 집계 함수 호출