客户端程序的SqlCommand.ExecuteNonQuery()CommandTimeout过期后,SQL Server是否继续运行存储过程?

SqlCommand.ExecuteNonQuery到期后,由客户端C#程序对CommandTimeout方法的调用所启动的SQL Server存储过程会发生什么?

  • SQL Server是否继续运行存储过程以完成操作(即使客户端放弃了等待结果的时间)?
  • SQL Server是否会停止执行该sproc,但是存储过程到目前为止所做的任何更改都会保留吗?
  • SQL Server是否停止执行该存储过程,并回滚所做的所有更改?
  • 这取决于吗? (如果是这样,在什么地方?)

以一个特定的示例为例:考虑以下(简化)代码段,该代码段由调度程序每天晚上运行一次,并调用特定的存储过程,该过程从非常大的数据库中清除了大量的过时的数据库记录表格:

SqlConnection connection = new SqlConnection(_myConnectionStringToSqlServer);
using (SqlCommand command = Connection.CreateCommand())
{
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "MyLongRunningCleanupOldRecordsStoredProcedure";
    command.CommandTimeout = 600;  // 10 minutes

    command.ExecuteNonQuery();
}

如果在配置的10分钟超时时间之后,SQL Server实例仍仅在运行MyLongRunningCleanupOldRecordsStoredProcedure sproc的途中,并且客户端程序超时并引发异常,那么此时数据库的行为是什么? ? (它会继续完成存储过程的运行并清理剩余的记录吗?是否已经回滚了已清理的所有记录?)

yingzi_06 回答:客户端程序的SqlCommand.ExecuteNonQuery()CommandTimeout过期后,SQL Server是否继续运行存储过程?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2716207.html

大家都在问