Хранимая процедура не выполняется в другой хранимой процедуре - PullRequest
3 голосов
/ 04 октября 2008

Я обнаружил, что SP2 не выполняется из SP1 при запуске SP1.

Ниже приведена структура SP1:

ALTER PROCEDURE SP1 AS BEGIN

Declare c1 cursor....

open c1 fetch next from c1 ...

while @@fetch_status = 0 Begin

...

Fetch Next from c1 end

close c1

deallocate c1

exec sp2

end

Я вижу не выходные данные оператора PRINT, если они напечатаны в «Окне вывода» в студии управления SQL Server 2005, так как «Окно вывода» пусто.

Ответы [ 3 ]

3 голосов
/ 04 октября 2008

Что произойдет, если вы запустите код хранимой процедуры как один запрос? Если вы ставите оператор PRINT до и после exec, вы видите оба вывода?

  • Если вы это сделаете, то хранимая процедура должна быть выполнена. Вероятно, он не делает то, что хотел бы.
  • Если вы не видите вывод на печать, значит, в цикле что-то не так
  • Если вы не видите второй вывод, но видите первый, во второй хранимой процедуре что-то не так.
0 голосов
/ 22 января 2009

вы можете использовать @@ error, чтобы увидеть, была ли ошибка при выполнении предыдущего оператора.

0 голосов
/ 20 октября 2008

Я не уверен, поможет ли это вам, но по моему опыту наиболее популярными причинами являются:

  1. sp2 получает некоторый параметр, который делает его null значением - т.е. вы строите его имя из строк, и одна из них - null.
  2. sp2 имеет некоторые условия внутри, и ни одно из них не является истинным, поэтому sp2 не выполняет код вообще - то есть один из параметров имеет тип varchar, вы передаете значение VALUE, проверьте его внутри , но реальное значение, переданное sp2, равно V (поскольку длина varchar не определена).
  3. sp2 строит запрос из параметров, один из которых равен null, и весь запрос тоже становится null.

Видите ли вы какие-либо выходные данные, если поставить PRINT до и после вызова sp2?

...