存储过程未在另一个存储过程中执行

时间:2008-10-04 14:37:14

标签: sql sql-server sql-server-2005 stored-procedures

我发现在SP1执行时SP2不会从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

如果在“输出窗口”为空的情况下在SQL Server 2005管理工作室的“输出窗口”中打印PRINT语句输出,则看不到它们。

3 个答案:

答案 0 :(得分:3)

如果您将存储过程代码作为单个查询运行会发生什么?如果你在exec之前和之后放了PRINT语句,你会看到两个输出吗?

  • 如果这样做,则必须执行存储过程。可能它不是你想要的。
  • 如果您没有看到任何打印输出,则循环中出现错误
  • 如果您没有看到第二个输出但是看到第一个输出,则第二个存储过程中出现了问题。

答案 1 :(得分:0)

我不确定它是否对您有所帮助,但根据我的经验,最常见的原因是:

  1. sp2获取一些使其成为null值的参数 - 即您从字符串中构建其名称,其中一个是null
  2. sp2内部有一些条件且没有一个是真的,因此sp2根本不执行代码 - 即其中一个参数是类型varchar,您传递值{{ 1}},在里面检查它,但传递给VALUE的实际值是sp2(因为没有定义varchar长度)。
  3. V根据参数构建查询,其中一个参数为sp2,整个查询也变为null
  4. 如果您在之前将<{1}} 放在之后 {em> 之后,您是否看到任何输出?

答案 2 :(得分:0)

你可以使用@@ error来查看执行前一个语句时是否有错误。