SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询

Posted

技术标签:

【中文标题】SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询【英文标题】:SQL Server stored procedure to report progress to its caller, an Access (VBA DAO) pass through query 【发布时间】:2017-10-29 11:38:01 【问题描述】:

SQL Server 存储过程是否可以向调用者报告进度? 我有一个由多个步骤组成的复杂任务,并且我有一个存储过程来完成它。我从 MS Access 前端调用此存储过程。存储过程大约需要 3-4 分钟才能完成,在此期间 Access 似乎“挂起”,等待存储过程返回结果或超时。

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

【问题讨论】:

【参考方案1】:

似乎没有好的解决方案。

尝试执行一个 SP 来完成你的工作(使用dbRunAsync),另一个 SP 来接收结果状态。第一个 SP 应该在某处存储执行状态,第二个 SP 将读取它。

【讨论】:

这其实是个好主意,我会试试的。我将把这个问题留待一段时间,希望有另一个更漂亮的解决方案。谢谢! 在 ADO.NET 中,您可以创建一个 SqlDataReader 对象来接收多个记录集,并在一个 SP 中添加多个 SELECT 语句以返回结果状态。我认为 DAO 不支持它。

以上是关于SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)

SQL Server基础操作(此随笔仅作为本人学习进度记录十 !--触发器)

pyodbc 不报告 sql server 错误

SQL Server常用系统存储过程大全

SQL Server 存储过程性能测试

SQL Server - 按可变数量的参数过滤查询