Share via


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 con valori di tabella. Se la stored procedure calcola un valore scalare, è possibile definire una funzione scalare.

Criteri per le funzioni con valori di tabella

Se una stored procedure risponde ai criteri seguenti, è consigliabile riformularla come una funzione con valori 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 con valori 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 con valori 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 con valori 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 con valori di tabella. Per ulteriori informazioni, vedere Creazione di funzioni CLR.