Est-il possible d'utiliser une Procédure Stockée comme une sous-requête dans SQL Server 2008?
J'ai deux procédures stockées, dont l'un renvoie une liste de paiements, tandis que l'autre renvoie un résumé de ces paiements, regroupés par monnaie. Maintenant, j'ai un double de la requête: la requête principale de la procédure stockée qui retourne la liste des paiements est une sous-requête de la procédure stockée qui retourne la synthèse des paiements en devise. Je voudrais éliminer cette duplicité en rendant la procédure stockée qui retourne la liste des paiements d'une sous-requête de la procédure stockée qui retourne la synthèse des paiements en devise. Est-ce possible dans SQL Server 2008?
OriginalL'auteur pyon | 2011-02-03
Vous devez vous connecter pour publier un commentaire.
Vous êtes mieux de convertir le premier proc en fonction TABLE. Si elle implique de multiples déclarations, vous devez d'abord définir le retour à la structure de la table et de le remplir.
Exemple:
-- devient --
Cependant, si c'est une droite (ou peut être écrite comme une seule instruction), alors vous pouvez utiliser la ligne tvf forme, ce qui est hautement optimisé
Le second proc sélectionne simplement à partir de la première proc
Et d'où vous appeler
pour obtenir un résultat, vous sélectionnez maintenant de il
OriginalL'auteur RichardTheKiwi
Insérant les résultats de votre procédure stockée dans une variable de table ou table temp fera l'affaire.
Si vous essayez de réutiliser le code dans SQL Server à partir d'une requête à l'autre, vous avez plus de souplesse avec les Fonctions de Table. Les vues sont tout droit si vous n'avez pas besoin de passer des paramètres ou utiliser n'importe quel type de contrôle de flux logique. Ceux-ci peuvent être utilisés comme des tableaux de toute autre fonction, procédure, la vue ou l'instruction t-sql.
OriginalL'auteur JeffO
Vous pouvez capturer la sortie à partir d'une procédure stockée dans une table temporaire, et ensuite utiliser le tableau dans votre requête principale.
Récupérer la sortie d'une procédure stockée qui retourne les colonnes ID et le Nom d'une variable de table.
La table temporaire, il a été corrigé dans la réponse mais je voulais juste préciser pour les futurs lecteurs qui pourraient être troublés par le commentaire ci-dessus étant de date.
Je souhaite qu'il y ait un
EXEC INTO #tmp
🙂OriginalL'auteur Mikael Eriksson
Si vous avez effectué la procédure qui retourne la liste dans un tableau à une fonction, alors je crois que vous pourriez utiliser une sous-requête.
OriginalL'auteur Colin
Je voudrais utiliser une vue, à moins qu'il doit être paramétrée, dans ce cas, je voudrais utiliser une fonction table en ligne, si possible, à moins qu'il doit être un multi-déclaration d'opération, où vous pouvez toujours utiliser une fonction table, mais ils sont généralement moins efficaces.
Leon je voudrais utiliser une fonction table en ligne si possible. Ce sont vraiment équivalent à paramétrée point de vue quant à la façon dont l'optimiseur peut les traiter et de les combiner avec n'importe quel sous-jacent points de vue et quel que soit le code est l'appel de l'ITVF.
Pouvez-vous appeler un ITVF dans le
FROM
clause d'une requête?Leon Certainement vous pouvez utiliser un ITVF à partir d'une vue (statique ou de code généré, si vous générez des points de vue - les paramètres) ou à partir d'un autre ITVF. Dans mon expérience, tous les points de vue et ITVFs (si rejoint straighforwardly) obtenir effondré par l'optimiseur assez efficace si vous regardez les plans d'exécution.
OriginalL'auteur Cade Roux