SQL SERVER 2008, проблема с вложенными процедурами - PullRequest
0 голосов
/ 29 сентября 2011

Рассматривая следующий пример

Procedure1
..........
IF(@errorcode<>0) ROLLBACK TRANSACTION
ELSE COMMIT TRANSACTION
SELECT @errorcode

Procedure2
..........
WHILE [condition] BEGIN
   EXEC @proc1result = Procedure1 [parameters]
   IF(@proc1result=0) SET @totalresult=@totalresult+1
END
SELECT @totalresult

Проблема заключается в том, что @totalresult правильно увеличивается, но значение, возвращаемое процедурой 2, равно 0. Как правильно это сделать?

Я использую sqlServer 2008 и Entity Framework 4. Процедура1 работает хорошо.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

(1) Для первой хранимой процедуры вы должны использовать RETURN @errorcode, а не SELECT @errorcode. Это также моя рекомендация.

ИЛИ (НЕ И)

(2) Для второй хранимой процедуры вы должны использовать INSERT ... EXEC Procedure1 следующим образом:

WHILE [condition] 
BEGIN
   DECLARE @Results TABLE (RetValue INT PRIMARY KEY);

   INSERT @Results
   EXEC Procedure1 [parameters];

   --IF 0=ALL(SELECT a.RetValue FROM @Results a)
   IF NOT EXISTS(SELECT * FROM @Results a WHERE a.RetValue <> 0)
      SET @totalresult=@totalresult+1;

END
SELECT @totalresult
0 голосов
/ 29 сентября 2011

", но значение, возвращаемое процедурой 2, равно 0"

Вы делаете SELECT @totalresult.Должно ли это быть return @totalresult?

Ответ Упендре ...

CREATE PROC dbo.TestReturn (@InValue int)
AS
Return @Invalue+1
GO

declare @value int
exec @value = TestReturn 100
select @value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...