Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :fonctions table et procédures stockées

Une fonction de table en ligne (TVF) est comme une macro :elle est développée dans la requête externe. Il n'a pas de plan en tant que tel :le SQL appelant a un plan.

Un TVF multi-instructions a un plan (trouvera une référence).

Les TVF sont utiles lorsque vous souhaitez faire varier la liste SELECT pour une entrée paramétrée. Les TVF en ligne sont étendues et la sélection/où externe sera prise en compte par l'optimiseur. Pour les TVF multi-instructions, l'optimisation n'est pas vraiment possible car elle doit s'exécuter jusqu'à la fin, puis filtre.

Personnellement, j'utiliserais un proc stocké sur un TVF multi-instructions. Ils sont plus flexibles (par exemple, des conseils, peuvent changer d'état, SET NOCOUNT ON, SET XACTABORT, etc.).

Je n'ai aucune objection aux TVF en ligne, mais je n'ai pas tendance à les utiliser pour le code client en raison de l'impossibilité d'utiliser SET et de changer d'état.