CREATE AGGREGATE (Transact-SQL)

Si applica a:SQL Server Istanza gestita di SQL di Azure

Crea una funzione di aggregazione definita dall'utente la cui implementazione è definita in una classe di un assembly in .NET Framework. Affinché il motore di database associ la funzione di aggregazione alla relativa implementazione, è necessario che l'assembly di .NET Framework che include l'implementazione venga prima caricato in un'istanza di SQL Server tramite un'istruzione CREATE ASSEMBLY.

Convenzioni di sintassi Transact-SQL

Sintassi

  
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 }  
  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

schema_name
Nome dello schema a cui appartiene la funzione di aggregazione definita dall'utente.

aggregate_name
Nome della funzione di aggregazione che si desidera creare.

@param_name
Uno o più parametri della funzione di aggregazione definita dall'utente. Il valore di un parametro deve essere fornito dall'utente quando la funzione di aggregazione viene eseguita. Specificare un nome di parametro usando come primo carattere il simbolo di chiocciola (@). Il nome di parametro deve essere conforme alle regole per gli identificatori. I parametri sono locali rispetto alla funzione.

system_scalar_type
Qualsiasi tipo di dati scalare di sistema di SQL Server per la memorizzazione del valore del parametro di input o del valore restituito. È possibile usare tutti i tipi di dati scalari come parametri di una funzione di aggregazione definita dall'utente, eccetto text, ntext e image. Non è possibile specificare tipi di dati non scalari, come cursor e table.

udt_schema_name
Nome dello schema a cui appartiene il tipo CLR definito dall'utente. Se omesso, il motore di database fa riferimento a udt_type_name nell'ordine seguente:

  • Spazio dei nomi del tipo SQL nativo.

  • Schema predefinito dell'utente corrente nel database corrente.

  • Schema dbo nel database corrente.

udt_type_name
Nome di un tipo CLR definito dall'utente già creato nel database corrente. Se udt_schema_name non viene specificato, SQL Server presume che il tipo appartenga allo schema dell'utente corrente.

assembly_name [ .class_name ]
Specifica l'assembly da associare alla funzione di aggregazione definita dall'utente e, facoltativamente, il nome dello schema a cui l'assembly appartiene e il nome della classe nell'assembly che implementa la funzione di aggregazione definita dall'utente. È necessario che l'assembly sia già stato creato nel database tramite un'istruzione CREATE ASSEMBLY. class_name deve essere un identificatore valido di SQL Server e deve corrispondere al nome di una classe esistente nell'assembly. class_name può essere un nome qualificato con lo spazio dei nomi se il linguaggio di programmazione usato per scrivere la classe usa spazi dei nomi, ad esempio C#. Se class_name non viene specificato, SQL Server presume che equivalga a aggregate_name.

Osservazioni:

Per impostazione predefinita, la capacità di SQL Server di eseguire il codice CLR è disattivata. È possibile creare, modificare ed eliminare gli oggetti di database che fanno riferimento a moduli di codice gestito, ma il codice in tali moduli verrà eseguito nell'istanza di SQL Server solo se l'opzione clr enabled viene abilitata tramite sp_configure.

La classe dell'assembly a cui viene fatto riferimento in assembly_name e i relativi metodi devono soddisfare tutti i requisiti di implementazione di una funzione di aggregazione definita dall'utente in un'istanza di SQL Server. Per altre informazioni, vedere Aggregazioni CLR definite dall'utente.

Autorizzazioni

È necessario disporre dell'autorizzazione CREATE AGGREGATE e anche dell'autorizzazione REFERENCES per l'assembly specificato nella clausola EXTERNAL NAME.

Esempi

Nell'esempio seguente si presuppone che sia stata compilata l'applicazione di esempio StringUtilities.csproj. Per altre informazioni, vedere Esempio String Utility Functions.

Nell'esempio viene creata la funzione di aggregazione Concatenate, ma prima che venga effettivamente creata la funzione di aggregazione, l'assembly StringUtilities.dll viene registrato nel database 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  

Vedi anche

DROP AGGREGATE (Transact-SQL)