EXEC存储过程在另一个内部并不等待完成

时间:2010-03-23 15:27:20

标签: sql stored-procedures timeout

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

3 个答案:

答案 0 :(得分:2)

创建一个新表:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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