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. |
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 }
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.
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 Überlegungen zum Installieren der SQL Server-Beispiele und -Beispieldatenbanken.
In diesem Beispiel wird das Concatenate-Aggregat erstellt. Bevor das Aggregat erstellt wird, wird die StringUtilities.dll-Assembly in der lokalen Datenbank registriert.
USE AdventureWorks2008R2; 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_50.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
Hinweis