CREATE AGGREGATE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Crea una función de agregado definida por el usuario con la implementación definida en una clase de un ensamblado en .NET Framework. Para que el Motor de base de datos enlace la función de agregado con su implementación, el ensamblado de .NET Framework que contiene la implementación debe cargarse primero en una instancia de SQL Server con una instrucción CREATE ASSEMBLY.

Convenciones de sintaxis de Transact-SQL

Sintaxis

  
CREATE AGGREGATE [ schema_name . ] aggregate_name  
        (@param_name <input_sqltype>   
        [ ,...n ] )  
RETURNS <return_sqltype>  
EXTERNAL NAME assembly_name [ .class_name ]  
  
<input_sqltype> ::=  
        system_scalar_type | { [ udt_schema_name. ] udt_type_name }  
  
<return_sqltype> ::=  
        system_scalar_type | { [ udt_schema_name. ] udt_type_name }  
  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

schema_name
Es el nombre del esquema al que pertenece la función de agregado definida por el usuario.

aggregate_name
Es el nombre de la función de agregado que desea crear.

@param_name
Uno o más parámetros en el agregado definido por el usuario. El usuario debe proporcionar un valor del parámetro cuando se ejecute la función de agregado. Especifique un nombre de parámetro con una arroba ( @ ) como primer carácter. El nombre del parámetro debe cumplir las mismas reglas para identifiers. Los parámetros son locales para la función.

system_scalar_type
Es cualquiera de los tipos de datos escalares del sistema de SQL Server que contienen el valor del parámetro de entrada o el valor devuelto. Todos los tipos de datos escalares se pueden usar como parámetros para un agregado definido por el usuario, excepto text, ntext e image. No se pueden especificar tipos no escalares, como cursor y table.

udt_schema_name
Es el nombre del esquema al que pertenece el tipo definido por el usuario CLR. Si no se especifica, el Motor de base de datos hace referencia a udt_type_name en el orden siguiente:

  • El espacio de nombres del tipo de SQL nativo.

  • El esquema predeterminado del usuario actual en la base de datos actual.

  • El esquema dbo de la base de datos actual.

udt_type_name
Es el nombre de un tipo definido por el usuario CLR que ya está creado en la base de datos actual. Si no se especifica udt_schema_name, SQL Server da por supuesto que el tipo pertenece al esquema del usuario actual.

nombre_del_ensamblado [ .nombre_de_la_clase ]
Especifica el ensamblado que se va a vincular con la función de agregado definida por el usuario y, opcionalmente, el nombre del esquema al que pertenece el ensamblado y el nombre de la clase del ensamblado que implementa el agregado definido por el usuario. El ensamblado debe haberse creado con antelación en la base de datos mediante una instrucción CREATE ASSEMBLY. class_name debe ser un identificador de SQL Server válido y coincidir con el nombre de una clase que exista en el ensamblado. class_name puede ser un nombre completo de espacio de nombres si el lenguaje de programación usado para escribir la clase usa espacios de nombres, como C#. Si no se especifica class_name, SQL Server considera que es el mismo que aggregate_name.

Comentarios

De manera predeterminada, la capacidad de SQL Server de ejecutar código CLR está desactivada. Puede crear, modificar y quitar objetos de base de datos que hacen referencia a módulos de código administrado, pero el código de estos módulos no se ejecutará en una instancia de SQL Server a menos que la opción clr enabled esté habilitada con sp_configure.

La clase del ensamblado al que se hace referencia en assembly_name y sus métodos debe satisfacer todos los requisitos para implementar una función de agregado definida por el usuario en una instancia de SQL Server. Para más información, vea Agregados definidos por el usuario de CLR.

Permisos

Requiere premisos CREATE AGGREGATE y REFERENCES en el ensamblado que se especifica en la cláusula EXTERNAL NAME.

Ejemplos

En el ejemplo siguiente se da por supuesto que una aplicación de ejemplo StringUtilities.csproj está compilada. Para más información, vea Ejemplo de funciones de la utilidad String.

En el ejemplo se crea un agregado Concatenate. Antes de crear el agregado, el ensamblado StringUtilities.dll se registra en la base de datos local.

USE AdventureWorks2022;  
GO  
DECLARE @SamplesPath nvarchar(1024)  
-- You may have to modify the value of the this variable if you have  
--installed the sample some location other than the default location.  
  
SELECT @SamplesPath = REPLACE(physical_name, 'Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\130\Samples\Engine\Programmability\CLR\')   
     FROM master.sys.database_files   
     WHERE name = 'master';  
  
CREATE ASSEMBLY StringUtilities FROM @SamplesPath + 'StringUtilities\CS\StringUtilities\bin\debug\StringUtilities.dll'  
WITH PERMISSION_SET=SAFE;  
GO  
  
CREATE AGGREGATE Concatenate(@input nvarchar(4000))  
RETURNS nvarchar(4000)  
EXTERNAL NAME [StringUtilities].[Microsoft.Samples.SqlServer.Concatenate];  
GO  

Consulte también

DROP AGGREGATE (Transact-SQL)