2010-10-12 73 views
0

我使用的是SQL Server 2000中
我的SP产生follwing输出:如何从我的存储过程中获取一组数据?

alt text

它总结了所有Taxable Earnings(顶部结果)和由Deductible Expenses(中间成果)之和减去它获得员工的Net Taxable Income

我如何才能得到净应税收入的价值?

这里是我的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 

是否有一个SQL语句,将导致不打印的EXEC的结果呢?

回答

2

在C#端的数据,你可以这样做:

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

准确地说,我即将发布的答案,我没有找到它。 – 2010-10-12 03:46:14

+0

好吧,先生,我会试试你的..谢谢。 – yonan2236 2010-10-12 05:22:49

0

您可以将执行的存储过程的结果转换为临时表。

CREATE TABLE #Tmp (etc etc) 

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

但你也可以使用EXEC命令结合起来为好,这就是答案,以捕获存储过程的输出。所有你需要做的就是创建一个表,通过INSERT语句接收存储过程的输出:

关键是创建表(在这个例子中是一个临时表),以便它有正确数量的列和兼容的数据类型来捕获存储过程的输出。

注:语法是psuedo语法,但你明白了,我希望!

这样,你可以放弃这些结果 - 因为这是你的意图,而不会影响你的调用存储过程的输出!但是,如果这些存储过程在您的控制之下,那么您应该考虑是否真的要重用它们/更改,然后仅返回输出参数而不返回结果集。您未necesssarily返回,你不打算使用,至少在这种情况下

+0

嗯...我已经尝试过了。但是有一些限制,它会导致错误(http://www.sommarskog.se/share_data.html#INSERTEXEC)。 “它不能嵌套,因此,一次只能有一个INSERT-EXEC活动。” – yonan2236 2010-10-12 02:54:10

+0

@ yonan2236 - 这些存储过程是否也会调用其他SP的,是吗?另外,我假设你没有任何控制权来修改这些SP,是吗? – InSane 2010-10-12 03:22:47

+0

是的,先生,它叫其他SP – yonan2236 2010-10-12 05:14:58

相关问题