2017-05-29 70 views
2

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 

回答

3

似乎有沒有好的解決辦法。

嘗試執行一個SP來完成您的工作(使用dbRunAsync)和另一個SP來接收結果狀態。第一個SP應該在某處存儲執行狀態,第二個SP將讀取它。

+0

這實際上是一個好主意,我會嘗試。我會暫時將問題留待一段時間,希望得到另一個更漂亮的解決方案。謝謝! – vacip

+1

在ADO.NET中,您可以創建一個'SqlDataReader'對象來接收多個記錄集,並在一個SP中添加多個'SELECT'語句以返回結果狀態。我認爲它在DAO中不受支持。 –