CREATE AGGREGATE (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed Instance

Vytváří uživatelsky definovanou agregační funkci, jejíž implementace je definována v třídě assembleru v rámci .NET Frameworku. Aby Database Engine mohl navázat agregovanou funkci na svou implementaci, musí být assembler .NET Frameworku, který obsahuje implementaci, nejprve nahrán do instance SQL Server pomocí příkazuCREATE ASSEMBLY.

Transact-SQL konvence syntaxe

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
Je název schématu, ke kterému uživatelem definovaná agregátní funkce patří.

aggregate_name
Je název agregátorské funkce, kterou chcete vytvořit.

@ param_name
Jeden nebo více parametrů v uživatelsky definovaném agregátu. Hodnota parametru musí být uživatelem zadána při spuštění agregační funkce. Zadejte název parametru pomocí znaku "at" (@) jako prvního znaku. Název parametru musí splňovat pravidla pro identifikátory. Parametry jsou lokální pro funkci.

system_scalar_type
Je některý ze skalárních datových typů systému SQL Server, který uchovává hodnotu vstupního parametru nebo vrácené hodnoty? Všechny skalární datové typy lze použít jako parametr pro uživatelem definovaný agregát, kromě textu, ntextu a obrázku. Neskalární typy, jako kurzor a tabulka, nelze specifikovat.

udt_schema_name
Je název schématu, ke kterému uživatelsky definovaný typ CLR patří. Pokud není specifikováno, Database Engine odkazy udt_type_name v následujícím pořadí:

  • Nativní jmenný prostor SQL typů.

  • Výchozí schéma aktuálního uživatele v aktuální databázi.

  • Schéma dbo v aktuální databázi.

udt_type_name
je název uživatelsky definovaného typu CLR, který je již vytvořen v aktuální databázi. Pokud udt_schema_name není specifikováno, předpokládá SQL Server typ patří ke schématu aktuálního uživatele.

assembly_name [ .class_name ]
Specifikuje assembler, který se váže s uživatelsky definovanou agregační funkcí a volitelně název schématu, ke kterému assembler patří, a název třídy v assembleru, která implementuje uživatelsky definovaný agregát. Assembler musí být již vytvořen v databázi pomocí příkazu CREATE ASSEMBLY . class_name musí být platným identifikátorem SQL Server a odpovídat názvu třídy, která existuje v assembleru. class_name může být označením kvalifikovaným pro jmenný prostor, pokud programovací jazyk používaný k zápisu třídy používá jmenné prostory, například C#. Pokud class_name není specifikováno, předpokládá SQL Server, že je stejný jako aggregate_name.

Remarks

Ve výchozím nastavení je možnost SQL Serveru spouštět kód CLR vypnutá. Můžete vytvářet, upravovat a odstraňovat databázové objekty, které odkazují na spravované kódové moduly, ale kód v těchto modulech se nesběží v instanci SQL Server pokud není povolena možnost CLR aktivovat pomocí sp_configure.

Třída assembleru odkazovaného v assembly_name a její metody by měly splňovat všechny požadavky pro implementaci uživatelsky definované agregační funkce v instanci SQL Server. Pro více informací viz CLR User-Defined Agregáty.

Permissions

Vyžaduje CREATE AGGREGATE povolení a také ODKAZUJE na assembler, které je specifikováno v klauzuli EXTERNAL NAME.

Examples

Následující příklad předpokládá, že je zkompilována ukázková aplikace StringUtilities.csproj. Pro více informací viz Ukázka funkcí užitků řetězců.

Příklad vytváří agregát Concatenate. Před vytvořením agregátu je sestava StringUtilities.dll registrována v místní databázi.

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  

Viz také

DROP AGGREGATE (Transact-SQL)