Requisitos para agregados CLR definidos pelo usuário
Aplica-se a:SQL Server
Um tipo em um assembly CLR (Common Language Runtime) pode ser registrado como uma função agregada definida pelo usuário, desde que implemente o contrato de agregação necessário. Este 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
, Merge
e Terminate
. Depois de atender a esses requisitos, você pode 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 agregadas 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 suportar os seguintes métodos de instância. O processador de consultas usa os seguintes métodos para calcular a agregação.
Método Init
Sintaxe:
public void Init();
O processador de consultas usa esse método para inicializar o cálculo da agregação. Esse método é invocado uma vez para cada grupo que o processador de consulta está agregando. O processador de consultas pode optar por reutilizar a mesma instância da classe aggregate para calcular agregações de vários grupos. O método Init
deve executar qualquer limpeza, conforme necessário, de usos anteriores desta instância e permitir que ele reinicie um novo cálculo agregado.
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 Map CLR parameter data.
Para tipos definidos pelo usuário (UDTs), o tipo de entrada é o mesmo que o tipo UDT. O processador de consultas usa esse método para acumular os valores agregados. Isso é invocado uma vez para cada valor no grupo que está sendo agregado. O processador de consultas sempre chama isso somente depois de chamar o método Init
na instância dada da classe agregada. A implementação desse método deve atualizar o estado da instância para refletir o acúmulo do valor do argumento que está sendo passado.
Método de mesclagem
Sintaxe:
public void Merge(udagg_class value);
Esse método pode ser usado para mesclar outra instância dessa classe agregada com a instância atual. O processador de consultas usa esse método para mesclar vários cálculos parciais de uma agregação.
Método Terminate
Sintaxe:
public return_type Terminate();
Este método completa o cálculo agregado 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 do return_sqltype especificado na instrução CREATE AGGREGATE
. O return_type também pode ser um tipo definido pelo usuário.