Переменные @estHrs
и @totHrs
содержат результаты выполнения ваших вложенных хранимых процедур. Если они выполняются без ошибок, эти результаты будут 0
, и это является причиной вашей Divide by zero
ошибки.
Важно сделать различие между результатом выполнения хранимой процедуры и набором результатов, который возвращает эта процедура.
Если вы хотите вернуть одно значение из вашей хранимой процедуры, используйте выходной параметр . Если ваша процедура возвращает набор результатов, вы можете вставить этот результат в таблицу и выбрать соответствующие значения из этой таблицы.
Хранимая процедура с выходным параметром:
CREATE PROCEDURE [uspOutputParameter]
@Param int OUTPUT
AS BEGIN
SET @Param = 1
END
DECLARE @err int
DECLARE @param int
EXECUTE @err = uspOutputParameter @Param OUTPUT
IF @err = 0 BEGIN
PRINT 'OK'
PRINT @Param
END
ELSE BEGIN
PRINT 'Error'
END
Хранимая процедура с набором результатов:
CREATE PROCEDURE [uspResultSet]
AS BEGIN
SELECT 1 AS Result
END
CREATE TABLE #Temp (Result int)
INSERT INTO #Temp (Result)
EXECUTE uspResultSet
SELECT *
FROM #Temp