首页 > 解决方案 > 客户端程序的 SqlCommand.ExecuteNonQuery() CommandTimeout 过期后,SQL Server 是否继续运行存储过程?

问题描述

过期后由客户端 C# 程序调用该SqlCommand.ExecuteNonQuery方法启动的 SQL Server 存储过程会发生什么情况CommandTimeout

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

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

    command.ExecuteNonQuery();
}

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

标签: c#sql-serversystem.data.net-4.8

解决方案


推荐阅读