Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 consta de cuatro métodos: Init, Accumulate, Mergey Terminate. Cuando cumpla estos requisitos, podrá aprovechar al máximo los agregados definidos por el usuario en Microsoft SQL Server. En las secciones siguientes de este tema se proporcionan detalles adicionales sobre cómo crear y trabajar con agregados definidos por el usuario. Para obtener un ejemplo, consulte Invocación de FUNCIONES de agregado de CLR User-Defined.
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 agregados de varios grupos. El Init método debe realizar cualquier limpieza según sea necesario en los usos anteriores de esta instancia y habilitarlo para volver a iniciar un nuevo cálculo 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 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. |
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. 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. |
Parámetros de Table-Valued
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 proporcionan una funcionalidad similar a las matrices de parámetros, pero ofrecen mayor flexibilidad e integración más estrecha 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 se puede pasar como un parámetro con valores de tabla a un procedimiento almacenado administrado o una función que se ejecuta en el proceso de SQL Server. Además, los TVP no se pueden usar dentro del ámbito de una conexión de contexto. Sin embargo, un TVP se puede usar con SqlClient en procedimientos almacenados administrados o funciones que se ejecutan en el proceso de SQL Server, si se usa en una conexión que no es una conexión de contexto. La conexión puede ser al mismo servidor que ejecuta el procedimiento administrado o la función. Para obtener más información sobre los TVP, vea Usar parámetros de Table-Valued (motor de base de datos).
Historial de cambios
| Contenido actualizado |
|---|
Se ha actualizado la descripción del Accumulate método; ahora acepta más de un parámetro. |
Véase también
Tipos de User-Defined CLR
Invocar funciones de agregado de CLR User-Defined