CREATE AGGREGATE (Transact-SQL)

Crea una función de agregado definida por el usuario cuya implementación se define en una clase de un ensamblado de Microsoft .NET Framework. Para que el SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) 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> )
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
    Es un parámetro del agregado definido por el usuario. El usuario debe proporcionar el valor del parámetro cuando la función de agregado se ejecute. Especifique un nombre de parámetro con un signo de arroba (
    @
    ) como el 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 se pueden utilizar como parámetros para un agregado definido por el usuario, excepto text, ntext e image. Los tipos no escalares, como cursor y table, no se pueden especificar.
  • 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 este 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 CLR User-Defined Aggregates.

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 StringUtilities (ejemplo).

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\MSSQL.1\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

DROP AGGREGATE (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005