Как получить только один набор данных из моей хранимой процедуры? - PullRequest
0 голосов
/ 12 октября 2010

Я использую SQL Server 2000.
Мой SP производит следующий вывод:

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 ]

2 голосов
/ 12 октября 2010

На стороне 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 голосов
/ 12 октября 2010

Вместо этого вы можете получить результаты выполненных хранимых процедур во временной таблице.

CREATE TABLE #Tmp (etc etc)

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

Но вы также можете комбинировать их и с командой EXEC, и это ответ на захват выводахранимая процедура.Все, что вам нужно сделать, это создать таблицу для получения вывода хранимой процедуры с помощью инструкции INSERT:

Ключом является создание таблицы (временная таблица в этом примере), чтобы она имела правильный номерстолбцов и совместимых типов данных для захвата вывода хранимой процедуры.

ПРИМЕЧАНИЕ: синтаксис - это псевдо-синтаксис, но вы, я надеюсь, поняли идею.

Таким образом, вы можете просто отбросить эти результаты, поскольку это то, чем вы хотите, не влияя на результатВы вызываете хранимую процедуру !!

Однако, если эти хранимые процедуры находятся под вашим контролем, вам следует подумать, действительно ли вы хотите их повторно использовать / изменить, чтобы потом возвращать только выходной параметр, а не набор результатов.Вы необязательно возвращаете данные, которые не собираетесь использовать, по крайней мере, в этом случае

...