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

공용 언어 런타임(CLR) 어셈블리의 형식이 필요한 집계 계약을 구현한다면 해당 형식을 사용자 정의 집계 함수로 등록할 수 있습니다. 이 계약은 SqlUserDefinedAggregate 특성과 집계 계약 메서드로 구성됩니다. 집계 계약은 집계의 중간 상태를 저장하는 메커니즘과 새 값을 누적하는 메커니즘을 포함하며 Init, Accumulate, Merge 및 Terminate의 네 가지 메서드로 구성됩니다. 이러한 요구 사항을 충족할 경우 Microsoft SQL Server에서 사용자 정의 집계의 모든 이점을 활용할 수 있습니다. 이 항목의 다음 섹션에서는 사용자 정의 집계를 만드는 방법과 사용하는 방법에 대한 자세한 정보를 제공합니다. 예를 보려면 CLR 사용자 정의 집계 함수 호출을 참조하십시오.

SqlUserDefinedAggregate

자세한 내용은 SqlUserDefinedAggregateAttribute를 참조하십시오.

집계 메서드

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

메서드

구문

설명

Init

public void Init();

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

Accumulate

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

함수의 매개 변수를 나타내는 1개 이상의 매개 변수. input_type은 CREATE AGGREGATE 문의 input_sqltype으로 지정된 네이티브 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 문에 지정된 return_sqltype의 관리되는 동등한 형식인 관리되는 SQL Server 데이터 형식이어야 합니다. return_type이 사용자 정의 형식이 될 수도 있습니다.

테이블 반환 매개 변수

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

참고 항목

개념

CLR 사용자 정의 형식

CLR 사용자 정의 집계 함수 호출

변경 내역

업데이트된 내용

Accumulate 메서드의 설명이 업데이트되어 이제 2개 이상의 매개 변수를 사용합니다.