1

假设 Stored Proc 需要 10 分钟才能运行并且不返回任何数据。

在 SQL Server 中调用存储过程并让您的代码不等待结果的正确方法是什么?有没有办法从 T-SQL 或连接处理它?在 ADO.NET 和经典 ActiveX ADO 中工作的东西?

我想到的唯一方法是:
1)在您的 T-SQL 中创建一个作业
2)将您的基于 T-SQL 的代码加载到作业的第一步中
3)确保您的代码的最后一行删除了作业
4)执行作业(我很确定这不会让你等待回应)我知道这非常糟糕和骇人听闻......但是

是否还有其他一些我没有想到的 T-SQL,您可以将存储过程包装起来说“我知道没有响应......所以我选择不等待。”?

4

4 回答 4

8

是的你可以

  1. 使用 SqlCommand.BeginExecuteNonQuery() 异步调用它
  2. 或者在委托上异步调用它(将使用线程池中的线程),
  3. 或在单独的线程上(自己创建)
  4. 在经典 ADO 中,使用 Connection 的 Open 方法中的 Option 参数:

    oConnection.Open( , , , adAsyncConnect)

于 2009-01-19T17:11:05.887 回答
2

对于.Net,请尝试.BeginExecuteNonQuery()您的SqlCommand对象的方法。不过,不确定这在 ActiveX ADO 中是​​如何工作的。

于 2009-01-19T17:06:59.437 回答
1

我会调查重写任何花费这么长时间的 SP,除非它正在进行更改或插入大量记录。如果您的 sp 从用户界面花费超过 30 秒,我说您很有可能出现性能问题。有问题的 proc 是否有游标?如果你是这样的话,你可以通过适当的性能调整将它降低到毫秒。我会在做一个解决方法之前考虑性能调整,以使用户界面在没有 proc 完成的情况下继续运行。

你说它不返回任何记录,但是如果它失败了用户需要知道什么?如果他们继续做其他事情,他们会认为它已经成功完成。

于 2009-01-19T17:12:22.297 回答
0

在单独的线程中运行它,然后让线程死掉。

于 2009-01-19T17:06:57.660 回答