CREATE AGGREGATE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Létrehoz egy felhasználó által definiált aggregált függvényt, amelynek megvalósítása egy .NET keretrendszer egy osztályában van definiálva. Ahhoz, hogy a Database Engine az aggregált függvényt a megvalósításához köthesse hozzá, először a .NET Framework összeállítót, amely tartalmazza a megvalósítást, fel kell tölteni egy SQL Server példányába egy CREATE ASSEMBLY utasítással.

Transact-SQL szintaxis konvenciók

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
Ez annak a sémának a neve, amelyhez a felhasználó által definiált aggregált függvény tartozik.

aggregate_name
Ez az aggregált függvény neve, amit létre akarsz hozni.

@ param_name
Egy vagy több paraméter a felhasználó által definiált aggregátumban. A paraméter értékét a felhasználónak kell megadnia, amikor az aggregált függvényt végrehajtják. Határozz meg egy paraméternevet úgy, hogy az első karakterként egy "at" jelet (@) használunk. A paraméter nevének meg kell felelnie az azonosítókra vonatkozó szabályoknak. A paraméterek lokálisak a függvényhez képest.

system_scalar_type
Van-e bármelyik SQL Server rendszer skaláris adattípusa, amely tartalmazza a bemeneti vagy visszaküldési értéket? Minden skaláris adattípus használható paraméterként egy felhasználó által definiált aggregátumhoz, kivéve a szöveget, az ntextet és a képet. Nem-skaláris típusok, mint például kurzor és tábla, nem meghatározhatók.

udt_schema_name
Az a séma neve, amelyhez a CLR felhasználó-definiált típus tartozik. Ha nincs megadva, a Database Engine hivatkozások a következő sorrendben udt_type_name:

  • A natív SQL típus névtér.

  • Az aktuális felhasználó alapértelmezett sémája az aktuális adatbázisban.

  • A dbo séma az aktuális adatbázisban.

udt_type_name
Ez egy CLR felhasználó által definiált típus neve, amelyet már létrehoztak a jelenlegi adatbázisban. Ha udt_schema_name nincs megadva, SQL Server feltételezi, hogy a típus a jelenlegi felhasználó sémájához tartozik.

assembly_name [ .class_name ]
Megadja az assembly függvényt, amely a felhasználó által definiált aggregált függvényhez kötött összesség, és opcionálisan annak a sémának nevét, amelyhez az assembly tartozik, valamint az osztály nevét az assemble-ben, amely a felhasználó által definiált aggregált implementálja. Az összeállítást már létre kell hozni az adatbázisban egy CREATE ASSEMBLY utasítással. class_name érvényes SQL Server azonosítónak kell lennie, és egyeznie kell egy olyan osztály nevével, amely az összeállításban létezik. class_name névtér-minősítő név lehet, ha az osztály írásához használt programozási nyelv névtereket használ, például C#-ot. Ha class_name nincs megadva, SQL Server feltételezi, hogy ugyanaz, mint a aggregate_name.

Remarks

Alapértelmezés szerint az SQL Server clr-kód futtatásának képessége ki van kapcsolva. Létrehozhatsz, módosíthatsz és eltávolíthatsz adatbázis-objektumokat, amelyek kezelt kódmodulokra hivatkoznak, de ezekben a modulokban lévő kód nem fut SQL Server példányban, hacsak a clr engedélyezett opció nem engedélyezett a sp_configure használatával.

A assembly_name-ban hivatkozott assembly osztályának és annak módszereinek teljesítenie kell minden követelményt egy felhasználó által definiált aggregált függvény megvalósításához SQL Server példányban. További információért lásd: CLR User-Defined Aggregátumok.

Permissions

Engedélyt CREATE AGGREGATE és HIVATKOZÁSI engedélyt igényel a KÜLSŐ NÉV záradékban meghatározott assembly esetén.

Examples

A következő példa feltételezi, hogy egy StringUtilities.csproj mintaalkalmazást fordítanak le. További információért lásd: String Utility Functions Sample (String Utility Functions Sample).

A példa aggregált Concatenate-t hoz létre. Az aggregált létrehozása előtt az összeállítást StringUtilities.dll regisztrálják a helyi adatbázisban.

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  

Lásd még

DROP AGGREGATE (Transact-SQL)