【发布时间】:2011-01-30 20:44:12
【问题描述】:
我有一个存储过程,它在其中执行另一个过程。第二个有时需要一段时间才能运行,但第一个似乎在等待第二个之前完成。这导致数据丢失,本应由第二个程序更新。第一个过程中是否有超时限制,可以延长吗?
【问题讨论】:
-
你从哪里执行存储过程?
标签: sql stored-procedures timeout
我有一个存储过程,它在其中执行另一个过程。第二个有时需要一段时间才能运行,但第一个似乎在等待第二个之前完成。这导致数据丢失,本应由第二个程序更新。第一个过程中是否有超时限制,可以延长吗?
【问题讨论】:
标签: sql stored-procedures timeout
创建一个新表:
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
【讨论】:
你理解错了。存储过程同步执行。然而,由于各种原因,内部过程的结果可能直到它们实际发生后才对外部过程可见。这可能就是为什么你看到的任何东西让你相信完成的顺序是不同步的。
【讨论】:
我怀疑内部存储过程实际上正在完成/退出,因为存储过程按顺序和对称地运行。
您可以尝试编写外部存储过程的脚本并将其放入 Management Studio,删除 Create Procedure 声明,将参数替换为 Declare 并添加 SET 语句以将它们设置为您在测试运行中使用的值。另外,在调用内部存储过程之后加上 Print 语句,看看它是否完成。
【讨论】: