【发布时间】:2016-11-22 19:08:42
【问题描述】:
我有一个每 25 分钟抛出一个错误的存储过程。我在应用程序中有代码,当它失败时会向我发送电子邮件。我正在尝试确定是否是程序本身导致了问题,或者它是否可能与服务器上发生的其他事情发生冲突,或者应用程序中的代码是否可能出错。直到本周它都运作良好。本周我们对应用程序进行了更改,并向 ADT_Diagnosis 表添加了新代码。自从添加代码以来,它一直在抛出错误。感谢所有提示和建议。提前致谢!
这是它发送给我的错误:
护理床服务发生错误。 ”System.Data.SqlClient.SqlException (0x80131904): 超时。在操作完成之前超时时间已过或服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,Boolean breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data .SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data .SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String 方法、DbAsyncResult 结果)在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,String 方法)的 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,String 方法)的 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法)( ) 在 Service.MainWindow.UpdateDataFromADT_Codes(SqlConnection SqlConn) 在 Service.MainWindow.TaskThread_DoWork(Object sender, DoWorkEventArgs e)
这里是 SQL 存储过程:
ALTER PROCEDURE GetActivePatientCoreMeasures
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT DISTINCT ADT.[PV1 Room],adt.[Patient Account Number],
[Diagnosis Codes].Description
FROM [CPSISQL].dbo.ADT
LEFT JOIN [CPSISQL].dbo.ADT_Diagnosis
ON [CPSISQL].dbo.ADT.[Patient Account Number] =
[CPSISQL].dbo.ADT_Diagnosis.[Patient Account #]
RIGHT JOIN [Diagnosis Codes]
ON ADT_Diagnosis.[Diagnosis Code] = [Diagnosis Codes].Code
WHERE [CPSISQL].dbo.ADT.[PV1 Discharge Date/Time] = ''
AND
(
[CPSISQL].dbo.ADT.[PV1 Department] = '028' OR
[CPSISQL].dbo.ADT.[PV1 Department] = '030' OR
[CPSISQL].dbo.ADT.[PV1 Department] = '032' OR
[CPSISQL].dbo.ADT.[PV1 Department] = '038' OR
[CPSISQL].dbo.ADT.[PV1 Department] = '042'
)
AND NOT(ADT_Diagnosis.[Diagnosis Type] = 'A')
ORDER BY adt.[PV1 Room]
END
【问题讨论】:
-
表定义(包括索引)、实际执行计划等......没有一些实际细节,这是一个废话。这可能是一个很好的起点。 spaghettidba.com/2015/04/24/… 从错误消息中可以清楚地看出您的 sql 连接超时。那可能是因为这个过程太慢了。可能是你等了很久。这可能是很多事情。
标签: sql sql-server vb.net stored-procedures