我有一个经常调用的存储过程,因为它用于检索帐户对帐单。实际存储过程在 MSSMS 的查询窗口中大约需要 10 毫秒,并且通常运行良好,但有时会在我的 VB6 应用程序中决定超时(超时设置为 120 秒)。SP 连接 2 个数据库之间的表,一个包含当前事务 (DB #1),另一个包含存档事务 (DB #2)。使用“sp_who2”,似乎没有 SPID 占用或阻塞系统。
这是我设置的 SQL 变量:
DECLARE @rtnRecs int;
strSQL = "EXEC spA_StatementData
@sAccountNr = '123abc',
@bIncludeHistory = 1,
@bShowAllTransactions = 1,
@iValidRecords = @rtnRecs OUTPUT"
我在VB6中使用的方法是:
rs.Open sql, con, adOpenStatic
其中 rs 是 ADODB.Recordset,con 是到数据库的连接。
这段代码在很长一段时间内运行良好,比如 2 个月,并被多个运营商使用。然后它突然无缘无故地停止工作 - 但在 MSSMS 中仍然可以正常工作。我强调的是 VB6,因为那是问题首次出现的地方,但同样的事情也发生在我的 VB.net 代码中。
需要注意的一点是,“@bIncludeHistory”参数是将 JOIN 设置为存档数据库 (DB #2) 的条件。当 '@bIncludeHistory' 设置为 0 时,不会发生超时。
重置服务可以解决问题,但只能作为最后的手段。还有什么我可以尝试的吗?谢谢