【问题标题】:Stored Procedure passing control back too quickily - VB6存储过程传递控制权太快 - VB6
【发布时间】:2012-01-25 20:46:35
【问题描述】:

我有一个存储过程正在更新一个非常大的表(超过 1 亿条记录)。存储过程正在更新此表中的记录。

步骤如下:

  1. 在记录集中存储要更新的记录 ID(并非所有记录都会更新 - 仅约 20000 条)
  2. 循环遍历记录集并为记录集中的每个记录 ID 调用存储过程
  3. 每次存储过程完成时(对于第 1 部分中提到的记录集中的每条记录),更新表中的标志以表示更新已完成。

我发现了一些奇怪的行为。看来存储过程在完成更新并继续处理下一条记录之前将控制权交还给 VB6。存储过程稍后会超时(在另一个记录 ID 上)。因此,即使存储过程尚未运行(因为它已超时),也有显示已更新的标志(步骤 3)。这是正常的行为,即存储过程在完成工作之前将控制权传递回 VB6?

我在 Google 上搜索过,我发现这可能是因为 SQL Server 优化了存储过程的方式。我希望仅在更新完成后将控制权传递回 VB6。不是这样吗?

请注意,我意识到可能有更好的方法来解决这个问题。我的问题具体涉及 SQL Server 在完成工作(更新)之前将控制权传递回 VB6。

【问题讨论】:

  • 你能发布一些代码和一些 SQL。这里有人可以极大地优化您的查询。
  • @Paul,谢谢。我意识到这一点,但问题更具体。 SQL Server(存储过程)能否在完成一系列更新之前将控制权交还给 VB6?
  • 请向我们展示您打开记录集的代码以及调用存储过程的代码。
  • 我明天必须这样做。存储过程是否有可能在处理完包含的 SQL 语句之前将控制权交还给程序?
  • 听起来你可能声明了adobd连接o方法的执行如何异步所以它正在执行的指令是异步的,发布一些代码

标签: sql vb6


【解决方案1】:

以下文章被证明是解决此问题的方法:http://weblogs.sqlteam.com/dang/archive/2007/10/20/Use-Caution-with-Explicit-Transactions-in-Stored-Procedures.aspx。似乎发生了以下行为:

1) 记录 1. 运行存储过程并创建事务。 SQL 命令对象发生超时。 2) 记录 2. 成功运行存储过程。将控件返回到 VB6 以更新数据库中的标志。 3) 记录 3. 成功运行存储过程。将控件返回到 VB6 以更新数据库中的标志。 4) 记录 4. 成功运行存储过程。将控件返回到 VB6 以更新数据库中的标志。 5) 程序结束。存储过程回滚事务(事务现在包含记录 1-4)。因此记录 1-4 不会被删除。

【讨论】:

    【解决方案2】:

    你能...

    • 在 sql management studio 中运行代码,看看会发生什么并报告回来?如果是这样,我将更新此答案,因为这将帮助我们了解它是代码/连接还是 sql。

    其他要调查的事情,因为我们不知道您测试了哪些案例...

    • 在您的 vb 应用程序中使用相同的代码路径,并且仅将存储过程中的 sql 更改为非常简单但具有相同签名的内容(即/如果有读取,则基本删除,如果有则基本删除正在删除,更新和添加也一样)看看会发生什么。

    还有一些其他的想法......

    • 如果您使用的是 MSSQL,这就像有人打开查询窗口一样简单,它会占用数据库。这很容易测试。我以前也遇到过同样的麻烦。在此之前我已经运行了存储过程,没有超时,通常会立即运行,但会在一夜之间运行而不运行。只是意识到另一个人打开了他们的查询窗口。关闭他们的窗口,然后它终于运行了。看看这个,它可能是一个表锁。无论是应用程序执行此操作,还是由另一个用户对数据库进行查询来完成。检查以确保您的应用程序在每次使用它们时都关闭与数据库的连接。

    【讨论】:

    • 谢谢。我理解它为什么会超时(其中一个表列需要索引)。但是,该问题专门询问为什么 SQL Server 似乎过早地将控制权传回。例如,有 100 个记录 ID 都需要调用存储过程。记录 51 次(记录 1-50 成功)。似乎 SQL Server 正在报告记录 51-100 的成功,即使它们失败了。
    猜你喜欢
    • 2020-12-14
    • 2011-06-18
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多