Compartilhar via


Requisitos para agregações definidas pelo usuário clr

Aplica-se:SQL Server

Um tipo em um assembly do CLR pode ser registrado como uma função de agregação definida pelo usuário, desde que implemente o contrato de agregação necessário. Esse contrato consiste no atributo SqlUserDefinedAggregate e nos métodos de contrato de agregação. O contrato de agregação inclui o mecanismo para salvar o estado intermediário da agregação e o mecanismo para acumular novos valores, que consistem em quatro métodos: Init, Accumulate, Mergee Terminate. Depois de atender a esses requisitos, você poderá aproveitar ao máximo as agregações definidas pelo usuário no SQL Server. Este artigo fornece mais informações sobre como criar e trabalhar com agregações definidas pelo usuário. Para obter um exemplo, consulte Invocar funções de agregação definidas pelo usuário clr.

Para obter mais informações, consulte SqlUserDefinedAggregateAttribute.

Métodos de agregação

A classe registrada como uma agregação definida pelo usuário deve dar suporte aos seguintes métodos de instância. O processador de consulta usa os métodos a seguir para calcular a agregação.

Método Init

Sintaxe:

public void Init();

O processador de consultas usa esse método para inicializar a computação da agregação. Ele é invocado uma vez para cada grupo que o processador de consultas está agregando. O processador de consulta pode optar por reutilizar a mesma instância da classe de agregação para agregações de computação de vários grupos. O método Init deve executar qualquer limpeza conforme necessário dos usos anteriores dessa instância e habilitá-lo para reiniciar uma nova computação agregada.

Método de acumulação

Sintaxe:

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

Um ou mais parâmetros que representam os parâmetros da função. input_type deve ser o tipo de dados gerenciado do SQL Server equivalente ao tipo de dados nativo do SQL Server especificado por input_sqltype na instrução CREATE AGGREGATE. Para obter mais informações, consulte mapear dados de parâmetro CLR.

Para UDTs (tipos definidos pelo usuário), o tipo de entrada é o mesmo que o tipo do UDT. O processador de consultas usa esse método para acumular os valores de agregação. Ele é invocado uma vez para obter cada valor no grupo que está sendo agregado. O processador de consulta sempre chama isso somente depois de chamar o método Init na instância fornecida da classe de agregação. A implementação desse método deve atualizar o estado da instância para refletir o acúmulo do valor do argumento que é passado.

Método merge

Sintaxe:

public void Merge(udagg_class value);

Esse método pode ser usado para mesclar outra instância desta classe de agregação com a instância atual. O processador de consultas usa esse método para mesclar várias computações parciais de uma agregação.

Método Terminate

Sintaxe:

public return_type Terminate();

Esse método completa a computação de agregações e retorna o resultado da agregação. O return_type deve ser um tipo de dados gerenciado do SQL Server que seja o equivalente gerenciado de return_sqltype especificado na instrução CREATE AGGREGATE. O return_type também pode ser um tipo definido pelo usuário.