CREATE AGGREGATE (Transact-SQL)

S’applique à : SQL Server Azure SQL Managed Instance

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 .NET Framework. Pour que le Moteur de base de données lie la fonction d’agrégation à son implémentation, vous devez d’abord charger l’assembly .NET Framework qui contient cette implémentation dans une instance de SQL Server à l’aide d’une instruction CREATE ASSEMBLY.

Conventions de la syntaxe 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. Le nom du paramètre doit respecter les règles applicables aux identificateurs. Les paramètres sont locaux à la fonction.

system_scalar_type
Un des types de données scalaires système SQL Server qui contiennent la valeur du paramètre d'entrée ou la valeur renvoyée. Tous les types de données scalaires peuvent être utilisés comme paramètre d’une agrégation définie par l’utilisateur, à l’exception de text, de ntext et d’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 spécifié, le Moteur de base de données fait 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

  • 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. class_name doit être un identificateur SQL Server valide et doit correspondre au nom d’une classe qui existe 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 des espaces de noms, comme C#. Si le paramètre class_name n’est pas spécifié, SQL Server suppose qu’il est identique à aggregate_name.

Remarques

Par défaut, la possibilité de SQL Server d'exécuter du code CLR est désactivée. Vous pouvez créer, modifier et annuler 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écute pas dans une instance de SQL Server, sauf si l’option cir enabled est activée à l’aide de sp_configure.

La classe de l’assembly référencé dans assembly_name et ses méthodes doivent répondre à toutes les exigences en matière d’implémentation 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 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  

Voir aussi

DROP AGGREGATE (Transact-SQL)