0

Je suis un peu confus sur ce qui est préférable d'utiliser dans le cas suivant: J'ai une requête assez complexe qui est utilisée à des fins de reporting. Une version simplifiée ressembleInline fonction table-valeur vs procédure stockée (SQL Server)

SELECT [type], COUNT(*) as total_num, COUNT(DISTINCT user_id) as uq_user_num 
    FROM table1 
    INNER JOIN table2 ON (...) 
    ... 
    WHERE table3.last_action_date BETWEEN :start_date AND :end_date 
    GROUP BY [type] 

Je peux créer une fonction en ligne ou une procédure stockée qui prend start_date et end_parameters et exécute cette requête.
Je suis enclin à fonctionner car cette tâche n'implique aucune modification de données ou logique complexe. Aussi, je peux vouloir utiliser le résultat dans APPLY plus tard (ce n'est pas vraiment important pour le moment).
Est-il sensé d'utiliser la fonction, pas la procédure? Est-ce une différence par rapport au point de vue des performances (mise en cache du plan d'exécution, etc.)?

Merci.

Répondre

1

l'aide d'une table multi-déclaration fonction d'une valeur est similaire à l'aide d'un proc de la mise en cache du plan et la perspective de la réutilisation des plans mis en cache .. L'utilisation d'une fonction table en ligne est similaire à l'utilisation d'une vue à partir du cache de plan et de la perspective de réutilisation du plan (la réutilisation n'est possible que si la même instruction est utilisée, c'est-à-dire les mêmes paramètres). Considérant la même chose, vous devriez utiliser une fonction de table à plusieurs instructions.

0

Vous pouvez envisager d'utiliser une vue aussi. Une vue est efficace si les résultats ne changent pas compte tenu des paramètres fournis, ce qui est ce que vous avez ici. Dans ce cas, les résultats ne changeront pas si vous effectuez deux appels avec les mêmes dates de début et de fin. Cependant, deux des principales différences entre un proc stocké et une fonction sont que vous ne pouvez pas appeler des mises à jour/insertions depuis une fonction et vous ne pouvez pas appeler un proc stocké dans une instruction select, mais vous pouvez le faire avec une fonction.

Voir ce fil pour plus d'info:

Function vs. Stored Procedure in SQL Server

+0

La vue ne fonctionne pas. J'ai besoin de filtrer les résultats, puis de les regrouper. Pour autant que je sache, il est impossible de passer des paramètres à – a1ex07

+1

J'ai vu ce lien avant de poster ma question; il a une bonne information sur la différence entre les fonctions et les procédures, mais c'est un peu trop général. Aussi, pour le moment, je ne me soucie pas vraiment d'appeler la procédure dans 'SELECT'; si j'ai besoin de le faire, je peux toujours déclarer une variable de table, puis la remplir avec 'INSERT INTO ... EXECUTE', puis utiliser la variable. – a1ex07