Requisiti per le aggregazioni CLR definite dall'utente
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. Tale 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, costituito da quattro metodi: Init, Accumulate, Merge e Terminate. Una volta soddisfatti questi requisiti, è possibile utilizzare in modo ottimale le aggregazioni definite dall'utente in Microsoft SQL Server. Nelle sezioni seguenti di questo argomento sono disponibili altre informazioni dettagliate su come creare e utilizzare aggregazioni definite dall'utente. Per un esempio, vedere Chiamata di funzioni di aggregazione CLR definite dall'utente.
Metodi di aggregazione
La classe registrata come aggregazione definita dall'utente deve supportare i metodi di istanza seguenti. Tali metodi vengono utilizzati da Query Processor per calcolare l'aggregazione:
Metodo |
Sintassi |
Descrizione |
---|---|---|
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 il calcolo delle aggregazioni di più gruppi. Il metodo Init deve eseguire tutta la pulizia necessaria rispetto agli utilizzi precedenti dell'istanza e abilitare l'istanza per riavviare un nuovo calcolo di aggregazione. |
Accumulate |
|
Uno o più parametri che rappresentano i parametri della funzione. input_type deve essere il tipo di dati gestito di SQL Server equivalente al tipo di dati nativo di SQL Server specificato da input_sqltype nell'istruzione CREATE AGGREGATE. Per ulteriori 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 avere 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 |
|
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 |
|
Questo metodo completa il calcolo di aggregazione e restituisce il risultato dell'aggregazione. return_type deve essere un tipo di dati gestito di SQL Server equivalente a return_sqltype specificato nell'istruzione CREATE AGGREGATE. return_type può essere anche 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. Pur essendo caratterizzati da funzionalità simili alle matrici di parametri, i parametri con valori di tabella offrono più flessibilità e una maggiore integrazione con Transact-SQL e consentono 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. Un tipo di tabella definito dall'utente non può essere passato come parametro con valori di tabella a una stored procedure gestita o a una funzione in esecuzione nel processo SQL Server, né può essere restituito dalle stesse. I parametri con valori di tabella, inoltre, non possono essere utilizzati nell'ambito di una connessione di contesto. È tuttavia possibile utilizzare un parametro con valori di tabella con SqlClient in stored procedure o funzioni gestite eseguite nel processo SQL Server, se utilizzato in una connessione diversa da una connessione di contesto. La connessione può essere stabilita con lo stesso server che esegue la procedura o la funzione gestita. Per ulteriori informazioni sui parametri con valori di tabella, vedere Parametri con valori di tabella (Motore di database).
Vedere anche