2010-10-12 10 views
0

J'utilise SQL Server 2000.
Mon SP produit la sortie follwing:Comment obtenir un seul ensemble de données de ma procédure stockée?

alt text

Il résume tout Taxable Earnings (meilleur résultat) et soustraire la somme de Deductible Expenses (résultat intermédiaire) à obtenir le Net Taxable Income d'un employé. Comment vais-je obtenir la valeur du revenu net imposable seulement?

Voici mon SP

/* 
DECLARE @NET_TAXABLE_INCOME AS NUMERIC(19, 2) 
EXEC NET_TAXABLE_INCOME '000001', '10/15/2010', @NET_TAXABLE_INCOME OUTPUT 
SELECT @NET_TAXABLE_INCOME 
*/ 
CREATE PROC [dbo].NET_TAXABLE_INCOME 
(
    @EMPLOYEENO AS VARCHAR(10), 
    @PAYROLLPERIOD_INPUT AS DATETIME, 
    @NET_TAXABLE_INCOME AS NUMERIC(19, 2) = NULL OUTPUT 
) 
AS 
BEGIN 
    DECLARE @TAXABALEEARNINGS AS NUMERIC(18, 2) 
    EXEC TAXABLE_EARNINGS_BREAKDOWN @EMPLOYEENO, @PAYROLLPERIOD_INPUT, @TAXABALEEARNINGS OUTPUT 
    DECLARE @DEDUCTIBLEEXPENSES AS NUMERIC(18, 2) 
    EXEC DEDUCTIBLE_EXPENSES_BREAKDOWN @EMPLOYEENO, @PAYROLLPERIOD_INPUT, @DEDUCTIBLEEXPENSES OUTPUT 

    SET @NET_TAXABLE_INCOME = @TAXABALEEARNINGS - @DEDUCTIBLEEXPENSES 
    SELECT @NET_TAXABLE_INCOME AS [NET_TAXABLE_INCOME] 
END 

Y at-il une instruction SQL qui fera pas imprimer le résultat de EXEC?

Répondre

2

Du côté C#, vous pouvez faire:

SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 
sqlReader.NextResult(); // Skip first result set. 
sqlReader.NextResult(); // Skip second result set. 
while (sqlReader.Read()) 
{ 
    var netTaxableIncome = sqlReader.GetValue(0); 
} 
+0

Exactement la réponse que j'étais sur le point de publier si je ne l'avais pas trouvé. –

+0

ok monsieur, je vais essayer le vôtre .. merci. – yonan2236

0

Vous pouvez obtenir les résultats des procédures stockées exécutées dans une table temporaire à la place.

CREATE TABLE #Tmp (etc etc) 

INSERT #Tmp 
EXEC DEDUCTIBLE_EXPENSES_BREAKDOWN @EMPLOYEENO, @PAYROLLPERIOD_INPUT, @DEDUCTIBLEEXPENSES OUTPUT 

Mais vous pouvez aussi le combiner avec la commande exec ainsi, et que la réponse est de capturer la sortie de la procédure stockée. Tout ce que vous devez faire est de créer une table pour recevoir la sortie de la procédure stockée via l'instruction INSERT:

La clé est de créer la table (une table temporaire dans cet exemple) afin qu'elle ait le bon nombre de colonnes et les types de données compatibles pour capturer la sortie de la procédure stockée.

NOTE: la syntaxe est la syntaxe de psuedo mais vous avez l'idée, j'espère! De cette façon, vous pouvez simplement ignorer ces résultats - comme c'est votre intention sans affecter la sortie de votre procédure stockée d'appel !!

Cependant, si ces procédures stockées sont sous votre contrôle, vous devriez considérer si vous voulez vraiment les réutiliser/changer alors pour ne renvoyer que le paramètre de sortie et non le jeu de résultats. Vous non necesssarily données retournerez que vous ne comptez pas utiliser, atleast dans ce cas

+0

Hmm ... Je l'ai déjà essayé. Mais il y a quelques restrictions et cela cause des erreurs en faisant ce genre d'approche (http://www.sommarskog.se/share_data.html#INSERTEXEC). "Il ne peut pas s'emboîter, ainsi, vous ne pouvez avoir qu'un seul INSERT-EXEC actif à la fois." – yonan2236

+0

@ yonan2236 - ces procédures stockées appellent-elles également d'autres SP, n'est-ce pas? Aussi, je suppose que vous n'avez aucun contrôle sur la modification de ces SP, n'est-ce pas? – InSane

+0

oui monsieur, il appelle d'autres SP – yonan2236

Questions connexes