CREATE AGGREGATE (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Creëert een door de gebruiker gedefinieerde aggregatefunctie waarvan de implementatie is gedefinieerd in een klasse van een assembly in het .NET Framework. Om de Database Engine de aggregatefunctie aan zijn implementatie te koppelen, moet de .NET Framework-assembly die de implementatie bevat eerst worden geüpload in een instantie van SQL Server door gebruik te maken van een CREATE ASSEMBLY statement.

Transact-SQL syntaxis-conventies

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 }  
  

Arguments

schema_name
Is de naam van het schema waartoe de door de gebruiker gedefinieerde aggregatefunctie behoort.

aggregate_name
Is de naam van de aggregatefunctie die je wilt maken.

@ param_name
Een of meer parameters in het door de gebruiker gedefinieerde aggregaat. De waarde van een parameter moet door de gebruiker worden aangegeven wanneer de aggregatefunctie wordt uitgevoerd. Specificeer een parameternaam door een "at"-teken () als eerste teken te@ gebruiken. De parameternaam moet voldoen aan de regels voor id's. Parameters zijn lokaal aan de functie.

system_scalar_type
Is een van de scalaire datatypes van het SQL Server-systeem die de waarde van de invoerparameter of retourwaarde vasthoudt? Alle scalaire datatypes kunnen worden gebruikt als parameter voor een door de gebruiker gedefinieerde aggregaat, behalve tekst, ntext en afbeelding. Niet-scalaire types, zoals cursor en tabel, kunnen niet worden gespecificeerd.

udt_schema_name
Is de naam van het schema waartoe het CLR-door de gebruiker gedefinieerde type behoort. Indien niet gespecificeerd, udt_type_name de Database Engine referenties in de volgende volgorde:

  • De native SQL-typenaamruimte.

  • Het standaardschema van de huidige gebruiker in de huidige database.

  • Het dbo-schema in de huidige database.

udt_type_name
Is de naam van een CLR-door de gebruiker gedefinieerd type dat al in de huidige database is aangemaakt. Als udt_schema_name niet is gespecificeerd, gaat SQL Server ervan uit dat het type behoort tot het schema van de huidige gebruiker.

assembly_name [ .class_name ]
Specificeert de assembly die moet binden met de door de gebruiker gedefinieerde aggregatefunctie en, optioneel, de naam van het schema waartoe de assembly behoort en de naam van de klasse in de assembly die de door de gebruiker gedefinieerde aggregate implementeert. De assembly moet al in de database zijn aangemaakt met behulp van een CREATE ASSEMBLY statement. class_name moet een geldige SQL Server-identifier zijn en overeenkomen met de naam van een klasse die in de assembly bestaat. class_name kan een namespace-gekwalificeerde naam zijn als de programmeertaal die gebruikt is om de klasse te schrijven namespaces gebruikt, zoals C#. Als class_name niet wordt gespecificeerd, gaat SQL Server ervan uit dat het hetzelfde is als aggregate_name.

Remarks

Standaard is de mogelijkheid van SQL Server om CLR-code uit te voeren uitgeschakeld. Je kunt databaseobjecten aanmaken, aanpassen en droppen die naar managed codemodules verwijzen, maar de code in deze modules draait niet in een instantie van SQL Server tenzij de clr-enabled optie wordt ingeschakeld door sp_configure te gebruiken.

De klasse van de assembly waarnaar wordt verwezen in assembly_name en de methoden ervan, moeten aan alle vereisten voldoen voor het implementeren van een door de gebruiker gedefinieerde aggregate functie in een instantie van SQL Server. Voor meer informatie, zie CLR User-Defined Aggregates.

Permissions

Vereist CREATE AGGREGATE toestemming en ook REFERENCES-toestemming op de assembly die is gespecificeerd in de EXTERNAL NAME-clausule.

Voorbeelden

Het volgende voorbeeld gaat ervan uit dat een StringUtilities.csproj-sampleapplicatie wordt gecompileerd. Voor meer informatie, zie String Utility Functions Sample.

Het voorbeeld creëert aggregaat Concatenate. Voordat het aggregaat wordt gemaakt, wordt de assembly StringUtilities.dll geregistreerd in de lokale database.

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  

Zie ook

DROP AGGREGATE (Transact-SQL)