Dela via


Krav för CLR-användardefinierade aggregeringar

gäller för:SQL Server

En typ i en CLR-sammansättning (Common Language Runtime) kan registreras som en användardefinierad aggregeringsfunktion, så länge den implementerar det nödvändiga aggregeringskontraktet. Det här kontraktet består av attributet SqlUserDefinedAggregate och aggregeringskontraktsmetoderna. Aggregeringskontraktet innehåller mekanismen för att spara aggregeringens mellanliggande tillstånd och mekanismen för att ackumulera nya värden, som består av fyra metoder: Init, Accumulate, Mergeoch Terminate. När du uppfyller dessa krav kan du dra full nytta av användardefinierade aggregeringar i SQL Server. Den här artikeln innehåller mer information om hur du skapar och arbetar med användardefinierade aggregeringar. Ett exempel finns i Invoke CLR user-defined aggregate functions.

Mer information finns i SqlUserDefinedAggregateAttribute.

Sammansättningsmetoder

Klassen som är registrerad som en användardefinierad aggregering bör ha stöd för följande instansmetoder. Frågeprocessorn använder följande metoder för att beräkna aggregeringen.

Init-metod

Syntax:

public void Init();

Frågeprocessorn använder den här metoden för att initiera beräkningen av aggregeringen. Den här metoden anropas en gång för varje grupp som frågeprocessorn aggregerar. Frågeprocessorn kan välja att återanvända samma instans av aggregeringsklassen för beräkningsaggregat för flera grupper. Metoden Init bör utföra all rensning efter behov från tidigare användningar av den här instansen och göra det möjligt för den att starta om en ny mängdberäkning.

Ackumulerad metod

Syntax:

public void Accumulate(input-type value[, input-type value, ...]);

En eller flera parametrar som representerar funktionens parametrar. input_type ska vara den hanterade SQL Server-datatypen som motsvarar den interna SQL Server-datatyp som anges av input_sqltype i CREATE AGGREGATE-instruktionen. Mer information finns i Mappa CLR-parameterdata.

För användardefinierade typer (UDT) är indatatypen samma som UDT-typen. Frågeprocessorn använder den här metoden för att ackumulera aggregerade värden. Detta anropas en gång för varje värde i gruppen som aggregeras. Frågeprocessorn anropar alltid detta endast efter att ha anropat metoden Init på den angivna instansen av aggregeringsklassen. Implementeringen av den här metoden bör uppdatera tillståndet för instansen så att den återspeglar ackumuleringen av argumentvärdet som skickas in.

Kopplingsmetod

Syntax:

public void Merge(udagg_class value);

Den här metoden kan användas för att sammanfoga en annan instans av den här aggregerade klassen med den aktuella instansen. Frågeprocessorn använder den här metoden för att sammanfoga flera partiella beräkningar av en aggregering.

Avsluta metod

Syntax:

public return_type Terminate();

Den här metoden slutför den aggregerade beräkningen och returnerar resultatet av aggregeringen. return_type ska vara en hanterad SQL Server-datatyp som är den hanterade motsvarigheten till return_sqltype som anges i CREATE AGGREGATE-instruktionen. return_type kan också vara en användardefinierad typ.