2010-06-24 4 views
1

J'ai actuellement une procédure stockée qui exécute une requête complexe et renvoie un ensemble de données. Je souhaite convertir cet ensemble de données en une table (sur laquelle je peux effectuer d'autres requêtes) si cela est possible. Je sais que je peux le faire en utilisant un UDF de table mais je préfère éviter cela à ce stade. Est-il possible que je puisse accomplir cette tâche?Résultat de procédure stockée en tant que table?

EDIT: OK ... donc le SProc que j'utilise (écrit par un tiers et je ne suis pas supposé le changer) exécute une instruction select assez complexe pour renvoyer un tas de données sur les commandes d'achat. Je peux le recréer comme un UDF, mais je devrais alors supporter le UDF et m'assurer qu'il change au fur et à mesure que notre fournisseur change son SProc. Je souhaite affiner davantage ces informations sur les éléments de campagne en fonction d'un certain nombre de critères tels que (mais sans s'y limiter) les numéros d'articles, les codes fournisseurs, les centres de coûts, etc. Toutes ces informations sont récupérées par le SProc d'origine. être capable de le manipuler davantage. Mon processus de pensée était que si je peux traiter les résultats du SProc sous forme de tableau (ou les placer dans un format de tableau quelconque), je peux lancer d'autres requêtes sur le jeu de résultats original afin de limiter les critères mentionnés ci-dessus. S'il vous plaît laissez-moi savoir si d'autres détails sont nécessaires.

Répondre

1

Il existe différents moyens de partager des données entre des procédures stockées - this link is pretty exhaustive.

Mais je suis curieux de savoir pourquoi vous voulez une table procédure stockée d'une valeur (qui n'existe pas dans SQL Server) quand il y a des tables fonctions ... une valeur

+0

Ce n'est pas tellement un SProc de table que c'est un SProc qui exécute une requête. Je souhaite continuer à manipuler les résultats de cette requête sans avoir à la réécrire dans un fichier UDF. –

+0

@Sonny Boy: Fournir plus de détails. Vous pouvez utiliser une table temporaire, mais c'est un dernier recours pour moi. Sachez que SQL est basé sur des ensembles, les paradigmes OOP ne sont pas bien adaptés à la taille de l'ensemble de données. –

+0

Message original édité pour inclure plus de détails. Merci. –

0

Avez-vous envisagé d'utiliser table-valued parameters? Ils sont nouveaux dans SQL 2008.

- Edition -

Non, jamais l'esprit, ils sont seulement bon pour transmettre des données dans procédures stockées.

1

Le résultat de la procédure a été stocké en tant que Tableau?

Oui et cela est utilisé assez souvent. Il a simplement besoin d'un ou plusieurs déclarations: sélectionnez

Create Procedure #Foo 
As 
Select object_id, name 
From sys.columns 

Cela dit, vous ne pouvez pas joindre à ce ResultSet ne peut vous consommer facilement d'une autre procédure stockée (bien qu'il y ait un moyen). Compte tenu de votre modification, il semble que la question est de savoir si vous pouvez consommer les résultats d'un proc stocké par un autre proc stocké. Techniquement, oui. Vous pouvez remplir une table temporaire avec les résultats d'un processus. Cependant, vous devez déclarer votre variable temporaire ou votre table temporaire avec la même structure de colonne que celle retournée par le premier jeu de résultats du processus stocké.

Declare @Data Table (object_id int, name nvarchar(128)) 

Insert @Data 
ExeC#Foo 

Select * 
From @Data 

(Ou utiliser la solution OPENROWSET beaucoup plus intelligent comme mentionné par Cade Roux et OMG Poneys)

0

Vous pouvez essayer d'utiliser une vue au lieu d'une procédure stockée. Stocker votre requête complexe dans le cadre de la vue, et vous avez la possibilité d'effectuer plus de requêtes sur la vue.

Questions connexes