长时间运行的存储过程,无需保持与 Azure 数据库的连接

cuo*_*gle 5 c# sql sql-server stored-procedures azure-sql-database

我们有很长时间运行的存储过程执行 ETL 工作,以便将原始表中的数据加载到 Azure 数据库中的星型架构(事实 - 维度)中。

这个存储过程需要大约 10 到 20 小时运行超过 1000 万行(使用 MERGE 语句)。

目前,我们从 C# 代码 (ADO.NET) 运行存储过程并保持CommandTimeout = 0(永远)。但有时连接会断开,因为与 Azure 数据库的连接不稳定。

是否可以在数据库级别运行存储过程而不一直保持连接打开,然后在 Progress 表中记录存储过程的过程以跟踪进度?

我看到一些建议:

  1. 代理作业,在 Azure 数据库上似乎不可能,因为它目前不支持。

  2. SqlCommand.BeginExecuteNonQuery:我不确定 100% 是否BeginExecuteNonQuery仍然保持连接在引擎盖下打开。

有没有其他方法可以做到这一点?