Réécriture de procédures stockées comme fonctions

Cette section décrit comment déterminer si la logique existante des procédures stockées doit être transformée en fonctions définies par l'utilisateur. Par exemple, si vous souhaitez appeler une procédure stockée directement à partir d'une requête, reconstituez le code sous la forme d'une fonction définie par l'utilisateur.

En règle générale, si la procédure stockée retourne un seul ensemble de résultats, définissez une fonction table. Si la procédure stockée calcule une valeur scalaire, définissez une fonction scalaire.

Critères applicables aux fonctions table

Si une procédure stockée respecte les critères suivants, elle peut tout à fait être réécrite en une fonction table :

  • Sa logique peut être exprimée en une seule instruction SELECT mais constitue une procédure stockée et non une vue, uniquement parce que des paramètres sont requis. Ce scénario peut être géré à l'aide d'une fonction table inline.

  • La procédure stockée n'effectue pas de mise à jour, excepté sur les variables de table.

  • Aucune instruction EXECUTE dynamique n'est requise.

  • La procédure stockée retourne un seul ensemble de résultats.

  • La finalité principale de la procédure stockée est l'élaboration de résultats intermédiaires en vue de leur chargement dans une table temporaire, laquelle est ensuite interrogée dans une instruction SELECT. Les instructions INSERT...EXEC peuvent être écrites à l'aide de fonctions table. Imaginons par exemple la séquence suivante :

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    Étant donné que la procédure stockée sp_getresults peut être réécrite sous la forme d'une fonction table, par exemple fn_results(), les instructions précédentes peuvent être réécrites de la manière suivante :

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

Réécriture de procédures stockées étendues à l'aide du CLR

Les fonctions CLR offrent une solution plus fiable et plus évolutive que les procédures stockées étendues. De nombreuses procédures stockées étendues effectuent une tâche de calcul qui est plus difficile à exprimer dans Transact-SQL. Compte tenu des avantages décrits ci-dessus, ces procédures stockées peuvent être réécrites à l'aide du CLR. En outre, les procédures stockées étendues qui retournent des jeux de résultats en accédant à une ressource externe, telle qu'un fichier ou un service Web, peuvent être réécrites à l'aide d'une fonction table CLR. Pour plus d'informations, consultez Création de fonctions CLR.