CREATE AGGREGATE (Transact-SQL)
Erstellt eine benutzerdefinierte Aggregatfunktion, deren Implementierung in einer Klasse einer Assembly in .NET Framework definiert ist. Damit Database Engine (Datenbankmodul) 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.
Hinweis |
---|
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. |
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 "at"-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 Database Engine (Datenbankmodul) 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, wird in SQL Server davon ausgegangen, dass der Typ zum Schema des aktuellen Benutzers gehört.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. 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, wie z. B. C#. Wird class_name nicht angegeben, wird in SQL Server davon ausgegangen, dass es mit aggregate_name identisch ist.
Hinweise
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 die SQL Server-Datenbankmodul-Beispiele im Standardspeicherort des lokalen Computers gespeichert sind, und dass die Beispielanwendung StringUtilities.csproj kompiliert ist. Weitere Informationen finden Sie unter String Utilities Sample.
In diesem Beispiel wird das Concatenate-Aggregat erstellt. Bevor das Aggregat erstellt wird, wird die StringUtilities.dll-Assembly in der lokalen Datenbank registriert.
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\MSSQL10.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