1 votes

Choisir les valeurs de retour d'une procédure stockée

J'ai une procédure stockée qui renvoie un résultat avec 250 !!! colonnes.

Mais je n'ai besoin que de 3 sur les 250.

Je veux appeler le SP et mettre seulement les valeurs des 3 colonnes dans un tableau temporaire. Je ne veux pas définir une table temporaire de 250 colonnes !

C'est ainsi que j'aimerais procéder, mais cela ne fonctionne pas, bien sûr :

create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable 
  exec myBigFatStoredProc

Peut-on le faire quand même ?

Au revoir Juergen

1voto

AdaTheDev Points 53358

Une solution serait de remplacer la procédure stockée d'origine par une fonction définie par l'utilisateur qui génère un tableau. Vous pourriez alors faire (par exemple) :

SELECT id, value1, value2
FROM dbo.fxnMyFunctionThatReturns250Columns('SomeParameter') x

Ce qui est "gênant" dans tout cela, c'est que le scénario dans lequel vous ne voulez que 3 colonnes aura toujours pour conséquence de renvoyer les 250 colonnes.

C'est quelque chose qui pourrait bien valoir la peine d'avoir une sproc séparée pour cela, car cela pourrait signifier que le scénario à 3 colonnes peut aboutir à un plan d'exécution beaucoup plus optimal.

0voto

KM. Points 51800

Vous pouvez utiliser cette excellente réponse : http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure/1228165#1228165

En bref, il utilise OPENROWSET pour exécuter la procédure stockée dans une table #temp qui est créée à la volée, sans qu'il soit nécessaire de nommer et de saisir toutes les colonnes.

0voto

HLGEM Points 54641

C'est le moment de ne pas réutiliser le code. Vous n'avez besoin que de trois colonnes, alors écrivez une proc qui le fait. Même si vous êtes capable de mettre seulement les trois colonnes que vous voulez dans une table temporaire, vous gaspillez toujours des ressources pour les générer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X