我有一个SQL查询,有时会失败。这意味着查询在大多数情况下运行良好。一旦查询失败,如果我再次执行有一些延迟,它在同一执行中成功。
请注意,在成功和失败方案之间的查询中使用的表没有变化。它们完全相同。如下所述,查询连接几个表,查询结果应为空。但有时ADO会抛出错误。
如何找出问题的根本原因?
我故意遗漏了一些细节,因为我有兴趣了解SQL查询失败的通用问题解决方法。
以下是有关任何特定替代方法的一些细节。
更新
对于这个特定问题,我认为客户端用完了可用的TCP端口。根据默认设置,5000端口是TCP端口的最大数量。在我的例子中,ADO创建隐式连接,每次进行查询时都会创建TCP端口。
netstat
告诉我,当我运行工作流程时,打开的端口数量会急剧增加。在大约4000个端口处查询失败(0-1023是保留端口)。 Jibcov Dobrev在here的回答指出了正确的方向。
答案 0 :(得分:3)
阅读错误消息!
查询只会因为某些原因而“失败”:
在解析时将拾取不正确或相互矛盾的聚合或语法。但...
它可能很慢或提供错误数据,但这不是“失败”。
编辑:
这不是查询错误:它是与任何SQL命令无关的连接错误。
通常,您现在需要确定它是与一个客户有关还是一般性问题
答案 1 :(得分:2)
SQL查询失败的“通用问题解决方法”与任何其他代码失败相同:
编辑: 在提供更具体的信息之后,以下Microsoft知识库文章:http://support.microsoft.com/kb/328306讨论了解决此问题的可能原因和方法。
答案 2 :(得分:2)
“潜在原因”知识库文章省略了解决它的问题 - “当您的应用程序处于高压力情况时,您无法使用SQL Server的OLE DB提供程序访问SQL Server数据库”{{3 }}
在这种情况下 - 进程运行一段时间,在错误发生之前检索数据OK。
运行'netstat -an'将显示进程运行时打开的所有ips /端口。对我来说,这些都是20左右,直到达到某个代码块...然后迅速上升到4000+并且应用程序失败
答案 3 :(得分:1)
你可以:
运行sql profiler捕获查询,确保查询格式正确。您可以根据需要保持跟踪运行。
在管理工作室中运行捕获的查询,sql server将丢弃它遇到的任何错误。
如果仍然没有帮助,可能会将查询拆分为多步存储过程..在每个步骤之前,在一个表/日志文件中记录值/参数等等,以便您可以在失败时识别一些常见因素。
甚至可以将构造的查询和结果记录在.net的日志文件中,并比较查询中的差异。
根据您设置数据连接的方式,visual studio还允许设备逐步执行存储过程。
答案 4 :(得分:0)
特定于
0x80004005(-2147467259)[DBNETLIB] [ConnectionOpen(Connect())。] SQL Server不存在或访问被拒绝。
这似乎是一个很好的调查起点:Potential causes of the "SQL Server does not exist or access denied" error message