CLR 사용자 정의 집계 요구 사항
공용 언어 런타임(CLR) 어셈블리의 형식이 필요한 집계 계약을 구현한다면 해당 형식을 사용자 정의 집계 함수로 등록할 수 있습니다. 이 계약은 SqlUserDefinedAggregate
특성과 집계 계약 메서드로 구성됩니다. 집계 계약은 집계의 중간 상태를 저장하는 메커니즘과 새 값을 누적하는 메커니즘을 포함하며 Init
, Accumulate
, Merge
및 Terminate
의 4가지 메서드로 구성됩니다. 이러한 요구 사항을 충족하면 Microsoft SQL Server 사용자 정의 집계를 최대한 활용할 수 있습니다. 이 항목의 다음 섹션에서는 사용자 정의 집계를 만드는 방법과 사용하는 방법에 대한 자세한 정보를 제공합니다. 예제는 CLR User-Defined 집계 함수 호출을 참조하세요.
SqlUserDefinedAggregate
자세한 내용은 SqlUserDefinedAggregateAttribute를 참조하세요.
집계 메서드
사용자 정의 집계로 등록된 클래스는 다음과 같은 인스턴스 메서드를 지원해야 합니다. 쿼리 프로세서는 이러한 메서드를 사용하여 집계를 컴퓨팅합니다.
메서드 | 구문 | Description |
---|---|---|
Init |
public void Init(); | 쿼리 프로세서는 이 메서드를 사용하여 집계 계산을 초기화합니다. 이 메서드는 쿼리 프로세서가 집계하는 각 그룹에 대해 한 번씩 호출됩니다. 쿼리 프로세서는 여러 그룹의 집계를 계산할 때 집계 클래스의 동일한 인스턴스를 다시 사용할 수 있습니다. Init 메서드는 이전에 인스턴스를 사용할 때 필요했던 모든 정리를 수행하고 인스턴스를 사용하여 새 집계 계산을 다시 시작할 수 있도록 만들어야 합니다. |
Accumulate |
public void Accumulate ( input-type value[, input-type value, ...]); | 함수의 매개 변수를 나타내는 1개 이상의 매개 변수. input_type 문에서 input_sqltype 지정한 네이티브 SQL Server 데이터 형식과 동일한 관리형 SQL ServerCREATE AGGREGATE 데이터 형식이어야 합니다. 자세한 내용은 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를 사용할 수 없습니다. 그러나 컨텍스트 연결이 아닌 연결에서 사용되는 경우 TVP는 SQL Server 프로세스에서 실행되는 관리되는 저장 프로시저 또는 함수에서 SqlClient와 함께 사용할 수 있습니다. 이 경우 관리되는 프로시저나 함수를 실행하는 서버와 동일한 서버에 연결될 수 있습니다. TVP에 대한 자세한 내용은 Table-Valued 매개 변수 사용(데이터베이스 엔진)을 참조하세요.
변경 내역
업데이트된 내용 |
---|
Accumulate 메서드의 설명이 업데이트되어 이제 2개 이상의 매개 변수를 사용합니다. |