CREATE AGGREGATE (Transact-SQL)CREATE AGGREGATE (Transact-SQL)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Erstellt eine benutzerdefinierte Aggregatfunktion, deren Implementierung in einer Klasse einer Assembly in .NET Framework.NET Framework definiert ist.Creates a user-defined aggregate function whose implementation is defined in a class of an assembly in the .NET Framework.NET Framework. Damit DatenbankmodulDatabase Engine die Aggregatfunktion an die Implementierung bindet, muss zunächst die .NET Framework.NET Framework-Assembly, die die Implementierung enthält, mithilfe einer CREATE ASSEMBLY-Anweisung in eine Instanz von SQL ServerSQL Server hochgeladen werden.For the DatenbankmodulDatabase Engine to bind the aggregate function to its implementation, the .NET Framework.NET Framework assembly that contains the implementation must first be uploaded into an instance of SQL ServerSQL Server by using a CREATE ASSEMBLY statement.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax


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 }  

ArgumenteArguments

schema_nameschema_name
Der Name des Schemas, zu dem die benutzerdefinierte Aggregatfunktion gehört.Is the name of the schema to which the user-defined aggregate function belongs.

aggregate_nameaggregate_name
Der Name der Aggregatfunktion, die Sie erstellen möchten.Is the name of the aggregate function you want to create.

@Param_name@ param_name
Ein oder mehrere Parameter im benutzerdefinierten Aggregat.One or more parameters in the user-defined aggregate. Der Wert eines Parameters muss vom Benutzer angegeben werden, wenn die Aggregatfunktion ausgeführt wird.The value of a parameter must be supplied by the user when the aggregate function is executed. Geben Sie einen Parameternamen, mit der eine "at"-Zeichen (@) als erstes Zeichen.Specify a parameter name by using an "at" sign (@) as the first character. Der Parametername muss den Regeln für entsprechen Bezeichner.The parameter name must comply with the rules for identifiers. Parameter gelten lokal in der jeweiligen Funktion.Parameters are local to the function.

system_scalar_typesystem_scalar_type
Einer der skalaren Systemdatentypen von SQL ServerSQL Server, um den Wert des Eingabeparameters oder Rückgabewerts zu speichern.Is any one of the SQL ServerSQL Server system scalar data types to hold the value of the input parameter or return value. Alle skalaren Datentypen können verwendet werden als Parameter für ein benutzerdefiniertes Aggregat außer Text, Ntext, und Image.All scalar data types can be used as a parameter for a user-defined aggregate, except text, ntext, and image. Nicht skalare Typen, wie z. B. Cursor und Tabelle, kann nicht angegeben werden.Nonscalar types, such as cursor and table, cannot be specified.

udt_schema_nameudt_schema_name
Der Name des Schemas, zu dem der CLR-benutzerdefinierte Typ gehört.Is the name of the schema to which the CLR user-defined type belongs. Wenn nicht angegeben, die DatenbankmodulDatabase Engine Verweise Udt_type_name in der folgenden Reihenfolge:If not specified, the DatenbankmodulDatabase Engine references udt_type_name in the following order:

  • Der systemeigene SQL-Namespace.The native SQL type namespace.

  • Das Standardschema des aktuellen Benutzers in der aktuellen DatenbankThe default schema of the current user in the current database.

  • Das dbo -Schema in der aktuellen DatenbankThe dbo schema in the current database.

    udt_type_nameudt_type_name
    Der Name eines CLR-benutzerdefinierten Typs, der bereits in der aktuellen Datenbank erstellt wurde.Is the name of a CLR user-defined type already created in the current database. Wenn Udt_schema_name nicht angegeben ist, SQL ServerSQL Server geht davon aus, der Typ gehört, auf das Schema des aktuellen Benutzers.If udt_schema_name is not specified, SQL ServerSQL Server assumes the type belongs to the schema of the current user.

    Assembly_name [ . Class_name ]assembly_name [ .class_name ]
    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.Specifies the assembly to bind with the user-defined aggregate function and, optionally, the name of the schema to which the assembly belongs and the name of the class in the assembly that implements the user-defined aggregate. Die Assembly muss bereits mit einer CREATE ASSEMBLY-Anweisung in der Datenbank erstellt worden sein.The assembly must already have been created in the database by using a CREATE ASSEMBLY statement. CLASS_NAME muss ein gültiger SQL ServerSQL Server Bezeichner und die Übereinstimmung der Name einer Klasse, die in der Assembly vorhanden ist.class_name must be a valid SQL ServerSQL Server identifier and match the name of a class that exists in the assembly. CLASS_NAME möglicherweise ein Namespace qualifizierten Namen, wenn die zum Erstellen der Klasse verwendete Programmiersprache Namespaces, z. B. c# verwendet.class_name may be a namespace-qualified name if the programming language used to write the class uses namespaces, such as C#. Wenn Class_name nicht angegeben ist, SQL ServerSQL Server wird angenommen, sie entspricht dem Aggregate_name.If class_name is not specified, SQL ServerSQL Server assumes it is the same as aggregate_name.

HinweiseRemarks

Standardmäßig ist die Möglichkeit, dass SQL ServerSQL Server CLR-Code ausführt, deaktiviert.By default, the ability of SQL ServerSQL Server to run CLR code is off. Sie erstellen, ändern und Löschen von Datenbankobjekten, die auf verwaltete Codemodule verweisen, aber der Code in diesen Modulen wird nicht ausgeführt, in einer Instanz von SQL ServerSQL Server , sofern die Option Clr-fähig aktiviert ist, mithilfe von "sp_" Konfigurieren Sie.You can create, modify, and drop database objects that reference managed code modules, but the code in these modules will not run in an instance of SQL ServerSQL Server unless the clr enabled option is enabled by using sp_configure.

Die Klasse Assemblyklasse Assembly_name und ihre Methoden sollten alle Anforderungen zum Implementieren einer benutzerdefinierten Aggregatfunktion in einer Instanz von erfüllen SQL ServerSQL Server.The class of the assembly referenced in assembly_name and its methods, should satisfy all the requirements for implementing a user-defined aggregate function in an instance of SQL ServerSQL Server. Weitere Informationen finden Sie unter benutzerdefinierte CLR-Aggregate.For more information, see CLR User-Defined Aggregates.

BerechtigungenPermissions

Erfordert die CREATE AGGREGATE-Berechtigungen sowie die REFERENCES-Berechtigung für die Assembly, die in der EXTERNAL NAME-Klausel angegeben ist.Requires CREATE AGGREGATE permission and also REFERENCES permission on the assembly that is specified in the EXTERNAL NAME clause.

BeispieleExamples

Im folgenden Beispiel wird davon ausgegangen, dass eine StringUtilities.csproj-Beispielanwendung kompiliert wird.The following example assumes that a StringUtilities.csproj sample application is compiled. Weitere Informationen finden Sie unter Utility Funktionen Beispiel einer Abfragezeichenfolge.For more information, see String Utility Functions Sample.

In diesem Beispiel wird das Concatenate-Aggregat erstellt.The example creates aggregate Concatenate. Bevor das Aggregat erstellt wird, wird die StringUtilities.dll-Assembly in der lokalen Datenbank registriert.Before the aggregate is created, the assembly StringUtilities.dll is registered in the local database.

USE AdventureWorks2012;  
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  

Siehe auchSee Also

DROP AGGREGATE ( Transact-SQL )DROP AGGREGATE (Transact-SQL)