CREATE AGGREGATE (Transact-SQL)
Crée une fonction d'agrégation définie par l'utilisateur dont l'implémentation est définie dans une classe d'un assembly dans le .NET Framework. Pour que le moteur de base de données 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.
[!REMARQUE]
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.
Conventions de la syntaxe de Transact-SQL
Syntaxe
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 }
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
Un ou plusieurs paramètres dans l'agrégat défini par l'utilisateur. L'utilisateur doit fournir la valeur d'un 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 @ 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. S'il n'est pas précisé, le moteur de base de données pointe sur 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ètre class_name doit être un identificateur SQL Server valide et doit correspondre au nom d'une classe existante dans l'assembly. 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 Agrégats CLR définis par l'utilisateur.
Autorisations
Nécessite les autorisations CREATE AGGREGATE et REFERENCES pour l'assembly mentionné dans la clause EXTERNAL NAME.
Exemples
L'exemple suivant suppose qu'un exemple d'application windows StringUtilities.csproj est compilé. Pour plus d'informations, consultez Exemple de fonctions d'utilitaire de chaîne.
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\MSSQL11.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