Compartir a través de


Requisitos para agregados definidos por el usuario de CLR

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 del 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 consta de cuatro métodos: Init, Accumulate, Merge y Terminate. Cuando cumpla estos requisitos, podrá aprovechar todas las ventajas de los agregados definidos por el usuario de Microsoft SQL Server. En las siguientes secciones de este tema se proporcionan detalles adicionales sobre la forma de crear y trabajar con agregados definidos por el usuario. Para obtener un ejemplo, vea Invocar funciones de agregado definidas por el usuario de CLR.

SqlUserDefinedAggregate

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. Estos son los métodos que usa el procesador de consultas para calcular la agregación:

Método

Sintaxis

Descripción

Init

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 los agregados de varios grupos. El método Init debe realizar cualquier operación limpieza necesaria con respecto a los usos anteriores de esta instancia y habilitarla para reiniciar un nuevo el cálculo de agregado.

Accumulate

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 de SQL Server administrado equivalente al tipo de datos de SQL Server nativo especificado en input_sqltype en la instrucción CREATE AGGREGATE. Para obtener más información, vea Asignar 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 solamente realiza esta llamada 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.

Merge

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.

Terminate

public return_type Terminate();

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

Parámetros con valores de tabla

Los parámetros con valores de tabla (TVP), tipos de tabla definidos por el usuario que se pasan a un procedimiento o función, proporcionan un modo eficaz de pasar varias filas de datos al servidor. Los TVP presentan una funcionalidad similar a las matrices de parámetros, pero proporcionan más flexibilidad y una mayor integración con Transact-SQL. También proporcionan la posibilidad de obtener mayor rendimiento. Además, los TVP ayudan a reducir el número de ciclos de ida y vuelta al servidor. En lugar de enviar varias solicitudes al servidor, como con una lista de parámetros escalares, los datos pueden enviarse al servidor como un TVP. Un tipo de tabla definido por el usuario no puede pasarse como un parámetro con valores de tabla a un procedimiento almacenado administrado o a una función que se ejecuta en el proceso de SQL Server, así como tampoco puede devolverse desde dicho procedimiento o función. Asimismo, los TVP no pueden usarse dentro del ámbito de una conexión de contexto. Sin embargo, un TVP puede usarse con SqlClient en procedimientos almacenados administrados o en funciones que se ejecutan en el proceso de SQL Server, si se usa en una conexión que no es de contexto. La conexión puede ser al mismo servidor que está ejecutando el procedimiento administrado o función. Para obtener más información acerca de TVP, vea Parámetros de valores de tabla (motor de base de datos).