SQL Server存储过程向其调用者报告进度,Access(VBA DAO)传递查询
问题描述:
SQL Server存储过程是否可以向调用者报告进度?
我有一个复杂的任务组成的多个步骤,我有一个存储过程来做到这一点。我从MS Access前端调用此存储过程。存储过程大约需要3-4分钟才能完成,在此期间,Access似乎“挂起”,等待存储过程返回结果或超时。SQL Server存储过程向其调用者报告进度,Access(VBA DAO)传递查询
我知道我可以将我的存储过程拆分成3-4个小块,然后一个接一个地调用它们,在这些步骤之间提供一些反馈。但是,这看起来像是一种解决方法,而不是解决方案。我也不希望有四个存储过程,而不是一个,因为我有很多这样的任务,这条路径将我的30个存储过程(已经很多)变成50+。
那么,有没有什么办法让存储过程偶尔向调用Access(DAO)报告一个状态或任何东西?
这是我如何调用存储过程:
Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("")
' get .Connect property from existing ODBC linked table
qdf.Connect = cdb.TableDefs("Quote").Connect
qdf.sql = "EXEC INV.ProcessMatchedQueries"
qdf.ReturnsRecords = False
qdf.ODBCTimeout = 300
qdf.Execute dbFailOnError
Set qdf = Nothing
Set cdb = Nothing
答
似乎有没有好的解决办法。
尝试执行一个SP来完成您的工作(使用dbRunAsync
)和另一个SP来接收结果状态。第一个SP应该在某处存储执行状态,第二个SP将读取它。
这实际上是一个好主意,我会尝试。我会暂时将问题留待一段时间,希望得到另一个更漂亮的解决方案。谢谢! – vacip
在ADO.NET中,您可以创建一个'SqlDataReader'对象来接收多个记录集,并在一个SP中添加多个'SELECT'语句以返回结果状态。我认为它在DAO中不受支持。 –