Compartir a través de


Requisitos para agregados definidos por el usuario clR

Se aplica a:SQL Server

Un tipo de un ensamblado CLR (Common Language Runtime) puede registrarse como una función de agregado definida por el usuario, siempre y cuando implemente el contrato de agregación necesario. Este contrato consta del atributo SqlUserDefinedAggregate y los métodos de contrato de agregación. El contrato de agregación incluye el mecanismo para guardar el estado intermedio de la agregación y el mecanismo para acumular nuevos valores, que constan de cuatro métodos: Init, Accumulate, Mergey Terminate. Una vez que cumpla estos requisitos, puede aprovechar al máximo los agregados definidos por el usuario en SQL Server. En este artículo se proporciona más información sobre cómo crear y trabajar con agregados definidos por el usuario. Para obtener un ejemplo, vea Invocar funciones de agregado definidas por el usuario clR.

Para obtener más información, vea SqlUserDefinedAggregateAttribute.

Métodos de agregación

La clase registrada como un agregado definido por el usuario debe admitir los métodos de instancia siguientes. El procesador de consultas usa los métodos siguientes para calcular la agregación.

Init (método)

Sintaxis:

public void Init();

El procesador de consultas usa este método para inicializar el cálculo de la agregación. Este método se invoca una vez para cada grupo que el procesador de consultas agrega. El procesador de consultas puede optar por reutilizar la misma instancia de la clase de agregado para calcular agregados de varios grupos. El método Init debe realizar cualquier limpieza según sea necesario en los usos anteriores de esta instancia y habilitarlo para reiniciar un nuevo cálculo agregado.

Método Accumulate

Sintaxis:

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

Uno o varios parámetros que representan los parámetros de la función. input_type debe ser el tipo de datos administrado de SQL Server equivalente al tipo de datos nativo de SQL Server especificado por input_sqltype en la instrucción CREATE AGGREGATE. Para obtener más información, consulte asignación de datos de parámetros clR.

En el caso de los tipos definidos por el usuario (UDT), el tipo de entrada es igual al tipo UDT. El procesador de consultas usa este método para acumular los valores de agregado. Debe invocarse una vez para cada valor en el grupo que se agrega. El procesador de consultas siempre llama a esto solo después de llamar al método Init en la instancia dada de la clase de agregado. La implementación de este método debe actualizar el estado de la instancia para reflejar la acumulación del valor de argumento que se pasa.

Método merge

Sintaxis:

public void Merge(udagg_class value);

Este método puede usarse para combinar otra instancia de esta clase de agregado con la instancia actual. El procesador de consultas usa este método para combinar varios cálculos parciales de una agregación.

Método Terminate

Sintaxis:

public return_type Terminate();

Este método completa el cálculo de agregado y devuelve el resultado de la agregación. El return_type debe ser un tipo de datos de SQL Server administrado que sea el equivalente administrado de return_sqltype especificado en la instrucción CREATE AGGREGATE. El return_type también puede ser un tipo definido por el usuario.