Riformulazione di stored procedure come funzioni
In questo argomento viene illustrato come stabilire se è opportuno riformulare la logica di una stored procedure esistente come una funzione definita dall'utente. Ad esempio, se si desidera richiamare una stored procedure direttamente da una query, è possibile riassemblare il codice in una funzione definita dall'utente.
Se la stored procedure restituisce un singolo set di risultati è in genere possibile definire una funzione valutata a livello di tabella. Se la stored procedure calcola un valore scalare, è possibile definire una funzione scalare.
Criteri per le funzioni valutate a livello di tabella
Se una stored procedure risponde ai criteri seguenti, è consigliabile riformularla come una funzione valutata a livello di tabella:
La logica può essere espressa in una singola istruzione SELECT ma si tratta di una stored procedure anziché di una vista semplicemente perché è necessario specificare parametri. In questo scenario è possibile utilizzare una funzione inline valutata a livello di tabella.
La stored procedure non esegue operazioni di aggiornamento, eccetto che per le variabili di tabella.
Non sono necessarie istruzioni EXECUTE dinamiche.
La stored procedure restituisce un set di risultati.
L'obiettivo principale della stored procedure è creare risultati intermedi che verranno caricati in una tabella temporanea, sulla quale viene quindi eseguita una query in un'istruzione SELECT. È possibile scrivere istruzioni INSERT...EXEC utilizzando funzioni valutate a livello di tabella. Si consideri, ad esempio, la sequenza seguente:
INSERT #temp EXEC sp_getresults SELECT ... FROM #temp, t1 WHERE ...
La stored procedure sp_getresults può essere riformulata come una funzione valutata a livello di tabella, ad esempio fn_results() e pertanto le istruzioni precedenti possono essere riformulate nel modo seguente:
INSERT #temp SELECT ... FROM fn_results(), t1 WHERE ...
Riformulazione di stored procedure estese tramite CLR
Le funzioni CLR offrono un'alternativa più affidabile e scalabile rispetto alle stored procedure estese, che spesso eseguono attività di calcolo difficili da definire in Transact-SQL. È pertanto possibile riformulare tali stored procedure sfruttando i vantaggi offerti dalle funzioni CLR. Le stored procedure estese che restituiscono set di risultati tramite l'accesso a un'origine esterna quale un file o un servizio Web possono inoltre essere riformulate tramite una funzione CLR valutata a livello di tabella. Per ulteriori informazioni, vedere Creazione di funzioni CLR.