CREATE AGGREGATE (Transact-SQL)

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 Database Engine (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.

[!NOTA]

De forma predeterminada, la capacidad de SQL Server para ejecutar el 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.

Icono de vínculo a temasConvenciones 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 }

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 un signo de arroba (
    @
    ) como primer carácter. El nombre de parámetro debe cumplir las reglas de los identificadores. 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 utilizar como parámetros para un agregado definido por el usuario, excepto text, ntext y image. No se pueden especificar los 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, Database Engine (Motor de base de datos) hace referencia a udt_type_name en el siguiente orden:

    • El espacio de nombres del tipo de SQL nativo.

    • El esquema predeterminado del usuario actual de 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.

  • assembly_name [ **.**class_name ]
    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 se debe haber creado con antelación en la base de datos con 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 calificado de espacio de nombres si el lenguaje de programación utilizado para escribir la clase utiliza espacios de nombres, como C#. Si no se especifica class_name, SQL Server considera que es el mismo que aggregate_name.

Notas

La clase del ensamblaje al que se hace referencia en assembly_name y sus métodos deben satisfacer todos los requisitos para implementar una función de agregado definida por el usuario en una instancia de SQL Server. Para obtener 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 siguiente ejemplo se da por supuesto que los ejemplos de motor de base de datos de SQL Server se han instalado en la ubicación predeterminada del equipo local y la aplicación de ejemplo StringUtilities.csproj está compilada. Para obtener más información, vea String Utilities Sample.

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 AdventureWorks;
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\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\90\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

Vea también

Referencia