【发布时间】:2012-01-25 20:46:35
【问题描述】:
我有一个存储过程正在更新一个非常大的表(超过 1 亿条记录)。存储过程正在更新此表中的记录。
步骤如下:
- 在记录集中存储要更新的记录 ID(并非所有记录都会更新 - 仅约 20000 条)
- 循环遍历记录集并为记录集中的每个记录 ID 调用存储过程
- 每次存储过程完成时(对于第 1 部分中提到的记录集中的每条记录),更新表中的标志以表示更新已完成。
我发现了一些奇怪的行为。看来存储过程在完成更新并继续处理下一条记录之前将控制权交还给 VB6。存储过程稍后会超时(在另一个记录 ID 上)。因此,即使存储过程尚未运行(因为它已超时),也有显示已更新的标志(步骤 3)。这是正常的行为,即存储过程在完成工作之前将控制权传递回 VB6?
我在 Google 上搜索过,我发现这可能是因为 SQL Server 优化了存储过程的方式。我希望仅在更新完成后将控制权传递回 VB6。不是这样吗?
请注意,我意识到可能有更好的方法来解决这个问题。我的问题具体涉及 SQL Server 在完成工作(更新)之前将控制权传递回 VB6。
【问题讨论】:
-
你能发布一些代码和一些 SQL。这里有人可以极大地优化您的查询。
-
@Paul,谢谢。我意识到这一点,但问题更具体。 SQL Server(存储过程)能否在完成一系列更新之前将控制权交还给 VB6?
-
请向我们展示您打开记录集的代码以及调用存储过程的代码。
-
我明天必须这样做。存储过程是否有可能在处理完包含的 SQL 语句之前将控制权交还给程序?
-
听起来你可能声明了adobd连接o方法的执行如何异步所以它正在执行的指令是异步的,发布一些代码