CREATE AGGREGATE (Transact-SQL)

Crea una funzione di aggregazione definita dall'utente la cui implementazione è definita in una classe di un assembly in .NET Framework. Affinché in Motore di database la funzione di aggregazione venga associata alla relativa implementazione, l'assembly .NET Framework che include l'implementazione deve innanzitutto essere caricato in un'istanza di SQL Server tramite un'istruzione CREATE ASSEMBLY.

[!NOTA]

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 la stored procedure sp_configure.

Icona di collegamento a un argomento Convenzioni della 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 }

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. Per specificare un nome di parametro, utilizzare come primo carattere la chiocciola (@). I nomi di parametro devono essere conformi 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 utilizzare tutti i tipi di dati scalari come parametro 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 viene omesso, 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 viene omesso, 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 di SQL Server valido e 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 utilizzato per scrivere la classe utilizza spazi di nomi, ad esempio C#. Se class_name viene omesso, SQL Server presume che equivalga a aggregate_name.

Osservazioni

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 ulteriori 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 ulteriori 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 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

Vedere anche

Riferimento

DROP AGGREGATE (Transact-SQL)