我有一个存储过程,它正在更新一个非常大的表(记录超过1亿条)。存储过程正在更新此表中的记录。
这些步骤如下:
我发现一些奇怪的行为。在完成更新并继续处理下一条记录之前,存储过程似乎正在将控制权传递回VB6。随后,存储过程将超时(在另一个记录ID上)。因此,即使存储过程没有运行(因为它超时了),仍然有一些标志可以说是已更新的(步骤3)。这是否是正常行为,即存储过程在完成工作之前将控制传递回VB6?
我对此进行了搜索,我发现这可能是因为SQL Server优化存储过程的方式。我希望只有在更新完成后才能将控制传递回VB6。不是这样的吗?
请注意,我意识到可能有更好的方法来处理这个问题。我的问题具体涉及Server在完成工作(更新)之前将控制权传递回VB6。
发布于 2012-01-30 13:11:23
下面的文章证明了这个问题的解决方案:http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx。似乎发生了下列行为:
1)记录1.运行存储过程并创建事务。出现对象的超时。2)记录2.成功运行存储过程。返回VB6以更新数据库中的标志。3)记录3.成功运行存储过程。返回VB6以更新数据库中的标志。4)记录4.成功运行存储过程。返回VB6以更新数据库中的标志。5)程序结束。存储过程回滚事务(事务现在包含记录1-4)。因此,记录1-4不被删除。
发布于 2012-01-29 00:20:28
你能..。
。
还有一些事情要调查,因为我们不知道你们检测的是什么.
还有其他一些想法..。
https://stackoverflow.com/questions/9010005
复制相似问题