9
votes

SQL Server STOCKED STORE VALEUR DE VALEUR DE RETOUR

HELO,

Ma question est que j'ai une procédure stockée dans SQL Server qui renvoie les comptes d'un champ. Je souhaite stocker les résultats de cette procédure stockée dans une variable (scalaire?) D'une procédure stockée différente. P>

-----------
NoColName
-----------
14

-----------
MyCol
-----------
abc
cde
efg


3 commentaires

Vous devrez nous montrer plus de code puisque votre question n'est pas claire.


Je suis d'accord .. Montrez-nous tout le contexte .. L'appel à l'autre Proc stocké.


Le problème est que le SproC renvoyant le comte comprend plus que celui de ses résultatsset, et cette sortie est devenue dans la 2e SproC.


4 Réponses :


4
votes

Eh bien, le moyen le plus simple de résoudre ce problème est de recoder le produit stocké afin que l'instruction SELECT qui renvoie l'ensemble de résultats «Autre» que vous ne voulez pas dans ce cas est conditionnellement extectué, uniquement lorsque vous ne demandez pas le Compte

Ajoutez un autre paramètre appelé @getCount xxx

alors Au lieu de juste xxx

écrire xxx


0 commentaires

13
votes

Vous pouvez capturer les résultats de la procédure stockée dans une table TEMP, il n'est donc pas retourné par la procédure stockée appelante.

create table #temp (id int, val varchar(100))
insert into #temp
exec sp_My_Other_SP @value, @value, @value, @count OUTPUT


3 commentaires

J'ai utilisé cette approche, mais plutôt qu'une table de hachage, j'ai utilisé le type de scalaire de table comme: Déclarez @Temp_tbl Table (valeur int) Insérer dans @temp_tbl Exec SP_MY_SP SET @COUT = (Sélectionnez la valeur TOP 1 de @temp_tbl)


Cela est bien sûr moins efficace depuis que vous sélectionnez des données que vous ne vous souciez pas. Vous feriez mieux d'ajouter un nouveau paramètre à SP_MY_OTHER_SP qui contrôle si l'ensemble de résultats est renvoyé ou non si vous recherchez simplement un compte.


Cela n'a pas de sens, je me soucie du compte comme je l'utiliserai toujours et il est essentiel au reste de la SP.



2
votes

Avez-vous essayé de changer xxx

à xxx

?


0 commentaires

0
votes
THE FIRST PROCEDURE:
CREATE PROC DD43
@ID INT OUTPUT AS
(SELECT @ID=COUNT(*) FROM CS2)

SECOND PROCEDURE:

 CREATE PROC DD45 AS
 DECLARE @COUNT INT
 DECLARE @COUN INT
 EXEC DD43 @COUN OUT --CALLING THE FIRST PROCEDURE
 SET @COUNT= (SELECT @COUN)
 SELECT @COUNT

 EXEC DD45 

1 commentaires

Bien que ce code puisse répondre à la question, il serait préférable d'expliquer comment cela résout le problème et pourquoi l'utiliser. Les réponses du code seulement ne sont pas utiles à long terme.