Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un tipo in un assembly CLR (Common Language Runtime) può essere registrato come funzione di aggregazione definita dall'utente, purché implementi il contratto di aggregazione necessario. Questo contratto è costituito dall'attributo SqlUserDefinedAggregate e dai metodi del contratto di aggregazione. Il contratto di aggregazione include il meccanismo per salvare lo stato intermedio dell'aggregazione e il meccanismo per accumulare nuovi valori, costituiti da quattro metodi: Init, Accumulate, Mergee Terminate. Dopo aver soddisfatto questi requisiti, sarà possibile sfruttare appieno le aggregazioni definite dall'utente in Microsoft SQL Server. Nelle sezioni seguenti di questo argomento vengono fornite informazioni aggiuntive su come creare e usare aggregazioni definite dall'utente. Per un esempio, vedere Richiamo di CLR User-Defined Funzioni di aggregazione.
SqlUserDefinedAggregate
Per altre informazioni, vedere SqlUserDefinedAggregateAttribute.
Metodi di aggregazione
La classe registrata come aggregazione definita dall'utente deve supportare i metodi di istanza seguenti. Questi sono i metodi usati da Query Processor per calcolare l'aggregazione:
| Metodo | Sintassi | Descrizione |
|---|---|---|
Init |
public void Init(); | Query Processor utilizza questo metodo per inizializzare il calcolo dell'aggregazione. Questo metodo viene richiamato una volta per ogni gruppo aggregato da Query Processor. Query Processor può scegliere di riutilizzare la stessa istanza della classe di aggregazione per l'elaborazione di aggregazioni di più gruppi. Il Init metodo deve eseguire qualsiasi pulizia in base alle esigenze degli usi precedenti di questa istanza e abilitarlo per riavviare un nuovo calcolo aggregato. |
Accumulate |
public void Accumulate ( input-type value[, input-type value, ...]); | Uno o più parametri che rappresentano i parametri della funzione.
input_type deve essere il tipo di dati di SQL Server gestito equivalente al tipo di dati di SQL Server nativo specificato da input_sqltype nell'istruzione CREATE AGGREGATE. Per altre informazioni, vedere Mapping dei dati dei parametri CLR.Per i tipi definiti dall'utente (UDT, User-Defined Type), il tipo di input coincide con il tipo definito dall'utente. Query Processor utilizza questo metodo per accumulare i valori di aggregazione. Il metodo viene richiamato una volta per ogni valore nel gruppo aggregato. Query Processor chiama sempre questo metodo solo dopo aver chiamato il metodo Init nell'istanza specificata della classe di aggregazione. L'implementazione di questo metodo deve aggiornare lo stato dell'istanza per riflettere l'accumulazione del valore dell'argomento passato. |
Merge |
public void Merge( udagg_class value); | Questo metodo può essere utilizzato per unire un'altra istanza di questa classe di aggregazione all'istanza corrente. Query Processor utilizza questo metodo per unire più calcoli parziali di un'aggregazione. |
Terminate |
public return_type Terminate(); | Questo metodo completa il calcolo di aggregazione e restituisce il risultato dell'aggregazione. Il return_type deve essere un tipo di dati di SQL Server gestito equivalente a quello gestito di return_sqltype specificato nell'istruzione CREATE AGGREGATE. Il return_type può anche essere un tipo definito dall'utente. |
Parametri con valori di tabella
I parametri con valori di tabella, ovvero tipi di tabella definiti dall'utente passati in una procedura o in una funzione, consentono di passare in modo efficiente più righe di dati al server. I provider di servizi di visualizzazione offrono funzionalità simili alle matrici di parametri, ma offrono maggiore flessibilità e maggiore integrazione con Transact-SQL. Consentono inoltre di ottenere prestazioni potenzialmente migliori. I parametri con valori di tabella consentono inoltre di ridurre il numero di round trip al server. Anziché inviare più richieste al server, ad esempio con un elenco di parametri scalari, è possibile inviare i dati al server sotto forma di parametro con valori di tabella. Non è possibile passare un tipo di tabella definito dall'utente come parametro con valori di tabella a o essere restituito da una stored procedure gestita o una funzione in esecuzione nel processo di SQL Server. Inoltre, non è possibile usare i provider di servizi di visualizzazione all'interno dell'ambito di una connessione di contesto. Tuttavia, un tvp può essere usato con SqlClient in stored procedure gestite o funzioni in esecuzione nel processo di SQL Server, se viene usato in una connessione che non è una connessione di contesto. La connessione può essere allo stesso server che esegue la routine o la funzione gestita. Per altre informazioni sui provider di servizi di configurazione, vedere Usare parametri Table-Valued (motore di database).
Cronologia delle modifiche
| Contenuto aggiornato |
|---|
Aggiornata la descrizione del Accumulate metodo. Accetta ora più di un parametro. |
Vedere anche
Tipi clr User-Defined
Richiamo di funzioni di aggregazione CLR User-Defined