我正在使用SQL Server 2000.
我的SP产生了以下输出:
汇总所有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
是否存在导致不打印EXEC
的结果的SQL语句?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
您可以将执行的存储过程的结果改为临时表。
CREATE TABLE #Tmp (etc etc)
INSERT #Tmp
EXEC DEDUCTIBLE_EXPENSES_BREAKDOWN @EMPLOYEENO, @PAYROLLPERIOD_INPUT, @DEDUCTIBLEEXPENSES OUTPUT
但您也可以将它与EXEC命令结合使用,这就是捕获存储过程输出的答案。您需要做的就是创建一个表,通过INSERT语句接收存储过程的输出:
关键是创建表(在此示例中为临时表),以便它具有正确数量的列和兼容的数据类型来捕获存储过程的输出。
注意:语法是伪造的语法,但我希望你明白这个想法!
这样,您就可以放弃这些结果 - 这就是您的意图,而不会影响您的调用存储过程的输出!!
但是,如果这些存储过程在您的控制之下,您应该考虑是否确实要重用它们/更改然后只返回输出参数而不是结果集。您无需返回您不会使用的数据,至少在这种情况下