Teilen über


CREATE AGGREGATE (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Erstellt eine benutzerdefinierte Aggregatfunktion, deren Implementierung in einer Klasse einer Assembly in .NET Framework definiert ist. Damit die Datenbank-Engine die Aggregatfunktion an die Implementierung bindet, muss zunächst die .NET Framework-Assembly, die die Implementierung enthält, mithilfe einer CREATE ASSEMBLY-Anweisung in eine Instanz von SQL Server hochgeladen werden.

Transact-SQL-Syntaxkonventionen

Syntax

  
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 }  
  

Argumente

schema_name
Der Name des Schemas, zu dem die benutzerdefinierte Aggregatfunktion gehört.

aggregate_name
Der Name der Aggregatfunktion, die Sie erstellen möchten.

@param_name
Ein oder mehrere Parameter im benutzerdefinierten Aggregat. Der Wert eines Parameters muss vom Benutzer angegeben werden, wenn die Aggregatfunktion ausgeführt wird. Geben Sie einen Parameternamen an, der mit dem Zeichen @ beginnt. Der Parametername muss den Regeln für Bezeichner entsprechen. Parameter gelten lokal in der jeweiligen Funktion.

system_scalar_type
Einer der skalaren Systemdatentypen von SQL Server, um den Wert des Eingabeparameters oder Rückgabewerts zu speichern. Alle skalaren Datentypen, außer text, ntext und image, können als Parameter für ein benutzerdefiniertes Aggregat verwendet werden. Nicht skalare Typen, wie beispielsweise cursor und table, können nicht angegeben werden.

udt_schema_name
Der Name des Schemas, zu dem der CLR-benutzerdefinierte Typ gehört. Wenn der Name des Schemas nicht angegeben ist, verweist die Datenbank-Engine auf udt_type_name in der folgenden Reihenfolge:

  • Der systemeigene SQL-Namespace.

  • Das Standardschema des aktuellen Benutzers in der aktuellen Datenbank

  • Das dbo -Schema in der aktuellen Datenbank

udt_type_name
Der Name eines CLR-benutzerdefinierten Typs, der bereits in der aktuellen Datenbank erstellt wurde. Falls udt_schema_name nicht angegeben wird, geht SQL Server davon aus, dass der Typ zum Schema des aktuellen Benutzers gehört.

Assemblyname [ .Klassenname ]
Die Assembly, die an die benutzerdefinierte Aggregatfunktion gebunden werden soll, und optional der Name des Schemas, zu dem die Assembly gehört, sowie der Name der Klasse innerhalb der Assembly, die das benutzerdefinierte Aggregat implementiert. Die Assembly muss bereits mit einer CREATE ASSEMBLY-Anweisung in der Datenbank erstellt worden sein. class_name muss ein gültiger SQL Server-Bezeichner sein und mit dem Namen einer Klasse übereinstimmen, die in der Assembly vorhanden ist. class_name kann ein mit dem Namespace qualifizierter Name sein, falls die zum Erstellen der Klasse verwendete Programmiersprache Namespaces verwendet, z.B. C#. Wenn class_name nicht angegeben ist, geht SQL Server davon aus, dass der Wert mit aggregate_name identisch ist.

Hinweise

Standardmäßig ist die Möglichkeit, dass SQL Server CLR-Code ausführt, deaktiviert. Sie können Datenbankobjekte erstellen, ändern und löschen, die auf Module für verwalteten Code verweisen. Der Code in diesen Modulen wird jedoch nur in einer Instanz von SQL Server ausgeführt, wenn die Option clr enabled mithilfe von sp_configure aktiviert wird.

Die in assembly_name angegebene Assemblyklasse und die zugehörigen Methoden sollten alle Anforderungen zum Implementieren einer benutzerdefinierten Aggregatfunktion in einer Instanz von SQL Server erfüllen. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Aggregate.

Berechtigungen

Erfordert die CREATE AGGREGATE-Berechtigungen sowie die REFERENCES-Berechtigung für die Assembly, die in der EXTERNAL NAME-Klausel angegeben ist.

Beispiele

Im folgenden Beispiel wird davon ausgegangen, dass eine StringUtilities.csproj-Beispielanwendung kompiliert wird. Weitere Informationen finden Sie unter Beispiel für Zeichenfolgenhilfsprogramm-Funktionen.

In diesem Beispiel wird das Concatenate-Aggregat erstellt. Bevor das Aggregat erstellt wird, wird die StringUtilities.dll-Assembly in der lokalen Datenbank registriert.

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  

Weitere Informationen

DROP AGGREGATE (Transact-SQL)