SQL 服务器存储过程向其调用者报告进度,一个 Access (VBA DAO) 通过查询

SQL Server stored procedure to report progress to its caller, an Access (VBA DAO) pass through query

有没有办法让 SQL 服务器存储过程向调用者报告进度?
我有一个由多个步骤组成的复杂任务,并且我有一个执行它的存储过程。我从 MS Access 前端调用这个存储过程。存储过程大约需要 3-4 分钟才能完成,在此期间 Access 似乎 "hang",正在等待存储过程 return 结果或超时。

我知道我可以将我的存储过程分成 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 将读取它。