Partager via


CREATE AGGREGATE (Transact-SQL)

Crée une fonction d'agrégation définie par l'utilisateur dont la mise en œuvre est définie dans une classe d'un assembly dans Microsoft .NET Framework. Pour que Moteur de base de données SQL Server 2005 lie la fonction d'agrégation à sa mise en œuvre, vous devez d'abord charger l'assembly .NET Framework qui contient cette mise en œuvre dans une instance de SQL Server à l'aide d'une instruction CREATE ASSEMBLY.

ms182741.note(fr-fr,SQL.90).gifRemarque :
Par défaut, la fonctionnalité d'exécution du code CLR de SQL Server est désactivée. Vous pouvez créer, modifier et supprimer des objets de base de données qui font référence à des modules de code managé. Cependant, le code de ces modules ne s'exécutera pas dans une instance de SQL Server, sauf si l'option clr enabled est activée à l'aide de l'argument sp_configure.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

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 }

Arguments

  • schema_name
    Nom du schéma auquel appartient la fonction d'agrégation définie par l'utilisateur.
  • aggregate_name
    Nom de la fonction d'agrégation que vous voulez créer.
  • @param_name
    Paramètre dans la fonction d'agrégation définie par l'utilisateur. L'utilisateur doit fournir la valeur du paramètre lors de l'exécution de la fonction d'agrégation. Spécifiez un nom de paramètre en plaçant le signe arobase (
    @
    ) comme premier caractère. Ce nom doit respecter les règles régissant les identificateurs. Les paramètres sont locaux à la fonction.
  • system_scalar_type
    Un des types de données scalaires système de SQL Server qui contiennent la valeur du paramètre d'entrée ou la valeur de retour. Tous les types de données scalaires peuvent être utilisés en tant que paramètre d'une agrégation définie par l'utilisateur, à l'exception de text, ntext et image. Les types non scalaires, tels que cursor et table, ne peuvent pas être spécifiés.
  • udt_schema_name
    Nom du schéma auquel appartient le type CLR défini par l'utilisateur. Si ce paramètre n'est pas spécifié, le moteur de base de données référence udt_type_name dans l'ordre suivant :

    • l'espace de noms de type SQL natif ;
    • le schéma par défaut de l'utilisateur actuel dans la base de données active ;
    • le schéma dbo dans la base de données active.
  • udt_type_name
    Nom d'un type CLR défini par l'utilisateur et déjà créé dans la base de données active. Si le paramètre udt_schema_name n'est pas spécifié, SQL Server suppose que le type appartient au schéma de l'utilisateur actuel.
  • assembly_name [ **.**class_name ]
    Spécifie l'assembly à lier à la fonction d'agrégation définie par l'utilisateur et, éventuellement, le nom du schéma auquel appartient l'assembly et le nom de la classe d'assembly qui met en œuvre l'agrégation définie par l'utilisateur. L'assembly doit avoir été déjà créé dans la base de données à l'aide de l'instruction CREATE ASSEMBLY. Le paramètreclass_name doit être un identificateur SQL Server valide et doit correspondre au nom d'une classe existante dans l'assembly. La paramètre class_name peut être un nom qualifié par l'espace de noms, si le langage de programmation utilisé pour écrire la classe utilise les espaces de noms, tel que C#. Si le paramètre class_name n'est pas spécifié, SQL Server suppose qu'il est identique à aggregate_name.

Notes

La classe de l'assembly référencé dans assembly_name et ses méthodes doivent répondre à toutes les exigences en matière de mise en œuvre d'une fonction d'agrégation définie par l'utilisateur dans une instance de SQL Server. Pour plus d'informations, consultez CLR User-Defined Aggregates.

Autorisations

Nécessite les autorisations CREATE AGGREGATE et REFERENCES pour l'assembly mentionné dans la clause EXTERNAL NAME.

Exemples

L'exemple suivant part du principe que les exemples du moteur de base de données SQL Server sont installés à l'emplacement par défaut sur l'ordinateur local et que l'exemple d'application StringUtilities.csproj est compilé. Pour plus d'informations, consultez Exemple StringUtilities.

L'exemple crée une agrégation Concatenate. Avant la création de celle-ci, l'assembly StringUtilities.dll est enregistré dans la base de données locale.

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

Voir aussi

Référence

DROP AGGREGATE (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005