Присвоить результат SQL SP переменным и суммировать результат - PullRequest
0 голосов
/ 25 июня 2019

Проблема: обе хранимые процедуры возвращают значение int, но сумма обоих значений int возвращает значение по умолчанию 0

Я видел различные решения с помощью выбора, который работает, или использовать временную таблицу без проблем, но мне нужнохранить результаты отдельно и затем суммировать их в конце (позволяя sp быть модульными). какие-либо идеи, поддерживающие совместимость с 2008?

Основная идея - иметь родительский sp с общим результатом и несколько модульных потомков.Каждый из sp является своим собственным результатом, который будет использоваться родителем.

Как назначить результат exec переменной sql?

declare @Result1 int = 0,
@Result2 int = 0,
@Total int = 0,
@projectID int,
@periodID int


exec @Result1 = [dbo].[QSP_getCount1] @projectID = 1,
@periodID = 12

exec @Result2= [dbo].[QSP_getCount2] @projectID = 1,
@periodID = 12

set @Total = @Result1 + @Result2

select @Total

Хранимый процесс - обаидентичны просто использовать таблицы сравнения (возвращаемые значения 1, 15)

if OBJECT_ID('dbo.QSP_getCount1', 'P') is not null
drop procedure [dbo].[QSP_getCount1]
go

create procedure [dbo].[QSP_getCount1] @projectID int,
@periodID int
as
declare @NullTotal int = 0;

select @NullTotal = case when col1 is not null then @NullTotal + 1 else @NullTotal end,
@NullTotal = case when col2 is not null then @NullTotal + 1 else @NullTotal end,
@NullTotal = case when col3 is not null then @NullTotal + 1 else @NullTotal end,
@NullTotal = case when col4 is not null then @NullTotal + 1 else @NullTotal end,
@NullTotal = case when col5 is not null then @NullTotal + 1 else @NullTotal end
from tablename
where projectID = 1005 and periodID = 210

select @NullTotal

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

В процедурах нет RETURN оператора , возвращаемое значение по умолчанию равно 0. Используйте RETURN @NullTotal вместо select @NullTotal для возврата значения int. SELECT в proc возвращает набор результатов (содержащий 1 строку, в данном случае 1 столбец), а не скаляр.

1 голос
/ 25 июня 2019

В коде есть ошибка

declare @Result1 int = 0,
@Result1 int = 0,
@Total int = 0,
@projectID int,
@periodID int

@ Result1 объявляется дважды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...