Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 consiste em quatro métodos: Init, Accumulate, Mergee Terminate. Quando atender a esses requisitos, você poderá aproveitar ao máximo as agregações definidas pelo usuário no Microsoft SQL Server. As seções a seguir deste tópico fornecem detalhes adicionais sobre como criar e trabalhar com agregações definidas pelo usuário. Para obter um exemplo, consulte Invocando clr User-Defined funções de agregação.
SqlUserDefinedAggregate
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. Estes são os métodos que o processador de consulta usa para calcular a agregação:
| Método | Sintaxe | Descrição |
|---|---|---|
Init |
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 Init método deve executar qualquer limpeza conforme necessário dos usos anteriores dessa instância e habilitá-lo para iniciar novamente uma nova computação agregada. |
Accumulate |
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 Mapeamento de 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. |
Merge |
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. |
Terminate |
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. |
Parâmetros com valor de tabela
Os TVPs (parâmetros com valor de tabela), ou seja, tipos de tabela definidos pelo usuário transmitidos para um procedimento ou uma função, oferecem uma maneira eficiente de passar várias linhas de dados para o servidor. As TVPs fornecem funcionalidade semelhante às matrizes de parâmetros, mas oferecem maior flexibilidade e integração mais próxima com o Transact-SQL. Eles também fornecem o potencial para melhor desempenho. Os TVPs também ajudam a reduzir o número de viagens de ida e volta para o servidor. Em vez de enviar várias solicitações ao servidor, como com uma lista de parâmetros escalares, os dados podem ser enviados ao servidor como um TVP. Um tipo de tabela definido pelo usuário não pode ser passado como um parâmetro com valor de tabela para, ou ser retornado, um procedimento armazenado gerenciado ou uma função em execução no processo do SQL Server. Além disso, OS TVPs não podem ser usados no escopo de uma conexão de contexto. No entanto, um TVP pode ser usado com SqlClient em procedimentos armazenados gerenciados ou funções em execução no processo do SQL Server, se ele for usado em uma conexão que não seja uma conexão de contexto. A conexão pode ser com o mesmo servidor que está executando o procedimento gerenciado ou a função. Para obter mais informações sobre TVPs, consulte Use Table-Valued Parameters (Mecanismo de Banco de Dados).
Histórico de alterações
| Conteúdo atualizado |
|---|
Atualizou a descrição do Accumulate método; agora ele aceita mais de um parâmetro. |
Consulte Também
Tipos de User-Defined CLR
Invocando funções de agregação de User-Defined CLR