EXEC在另一个存储过程不会等待完成

问题描述:

我有一个存储过程,它执行其中的另一个过程。第二个有时需要一段时间才能运行,但第一个似乎在等待第二个之前完成。这导致数据丢失,应该由第二个程序更新。第一个程序中是否有超时限制,可以延长吗?EXEC在另一个存储过程不会等待完成

+0

你从哪里执行存储过程? – 2010-03-23 15:30:42

创建新表:在每道工序

LogInfo 
LogID  int auto number/identity primary key 
LogDate date default current date and time 
LogValue string 

添加的INSERT语句中是这样的:

INSERT INTO LogInfo (LogValue) VALUES ('starting procedure A') 
... 
INSERT INTO LogInfo (LogValue) VALUES ('Calling procedure B') 
... 

INSERT INTO LogInfo (LogValue) VALUES ('ending procedure A') 

然后做到这一点

SELECT * FROM LogInfo ORDER BY LogID 

,看看发生了什么事,希望你会看到这是因为程序顺序运行且B不能在A后完成:

starting procedure A 
Calling procedure B 
starting procedure B 
ending procedure B 
ending procedure A 
+0

也许在此日志表中添加一些列以跟踪在执行期间您看到的值是否已更改或未在特定点更改? – 2010-03-23 15:43:46

+0

谢谢,我会放弃这一点。我不认为A可以在B之前完成,但我只是得到了奇怪的结果。 – markvpc 2010-03-23 16:20:01

+0

@ CL4NCY,这将证明这种或那种情况正在发生。 – 2010-03-23 17:15:04

我会怀疑内部存储过程实际上是完成/退出,因为存储过程顺序和对称地运行。

您可以尝试脚本化外部存储过程并将其放到Management Studio中,删除Create Procedure声明,用Declare替换参数并添加SET语句以将它们设置为您在测试运行时使用的值。另外,在调用内部存储过程之后放置Print语句并查看它是否完成。

你可以理解错了。存储过程同步执行。然而,由于各种原因,内部过程的结果可能在外部过程中不可见,直到它们实际发生之后。这可能是为什么你看到你所看到的任何让你相信完成顺序不一致的原因。