我有一个存储过程正在更新一个非常大的表(超过1亿条记录)。存储过程正在更新此表中的记录。
步骤如下:
我发现了一些奇怪的行为。看来存储过程在完成更新之前将控制权传递回VB6并继续处理下一条记录。然后,存储过程稍后(在另一个记录ID上)超时。因此,即使存储过程没有运行(因为它超时),也有标记说更新(步骤3)。这是正常的行为,即存储过程在完成工作之前将控制权传递回VB6吗?
我已经用Google搜索了这个,我发现它可能是因为SQL Server优化了存储过程的方式。我希望在更新完成后,只能将控制权传递回VB6。情况不是这样吗?
请注意,我意识到可能有更好的方法来解决这个问题。我的问题具体涉及SQL Server在完成工作(更新)之前将控制权传递回VB6。
答案 0 :(得分:1)
以下文章证明了这个问题的解决方案:http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx。看来发生了以下行为:
1)记录1.运行存储过程并创建事务。 SQL命令对象的超时发生者。 2)记录2.成功运行存储过程。将constrol返回到VB6以更新数据库中的标志。 3)记录3.成功运行存储过程。将constrol返回到VB6以更新数据库中的标志。 4)记录4.成功运行存储过程。将constrol返回到VB6以更新数据库中的标志。 5)程序结束。存储过程回滚事务(事务现在包含记录1-4)。因此,记录1-4不会被删除。
答案 1 :(得分:0)
你能......
其他要调查的事情,因为我们不知道你测试过的是什么情况......
另外,其他一些想法......