Sharingan,
存储过程中的步骤不会导致超时。调用SP的客户端有一个超时值,如果SP花费的时间比它长,它就会“认为”有问题。这并不意味着你的SP架构错误,或者它实际上失败了。
一种方法是创建一个日志表,并在存储过程中,在开始时从该表中删除所有行(每次运行SP时都会清除一个TEMP表)。然后在该过程的每一步之前,在日志表中插入一行,如'正在启动员工ETL ...',以及'完成的员工ETL ...'步骤之后。
您还可以检查每个步骤后是否发生错误,并将错误消息写入此表。这有效地成为您自己的日志。
IF @@ERROR <> 0
BEGIN
-- Add Error_Message to your table
END
如果调用进程没有正确设置超时值,你可能会看到SP实际完成(通过检查你的日志),但客户端错误地认为什么是错的,因为超时值已超过。客户端的超时错误不会阻止SQL Server继续工作。
您可以尝试从SSMS自行运行存储过程,例如?如果这种方法有效,那么您就可以追踪问题了,但区分它是SQL还是客户端,比如Azure Logic应用程序,或者启动ETL过程的任何东西都很重要。您可能需要编译/模拟传递到SP中的任何参数,但在SSMS中应该很容易。
您也可以将一个大SP分成一组较小的SP,并向您的ETL客户端添加更多步骤,而不是一个庞大的SP调用。这可能会迫使你实施瞬态错误处理,但在你的情况下这可能是可管理的。
祝你好运!