我们的一个存储过程出现奇怪的错误。此存储过程调用其他存储过程,我们收到与在子过程中找不到的列相关的错误。例如:
Exec StoredProc1, this stored proc calls StoredProc2, StoredProc3 & StoredProc4
当我第一次执行 StoredProc1 时,我收到与 StoredProc2 上的列相关的错误。然后我直接执行 StoredProc2 并且它工作,然后我再次调用 StoredProc1 并且它抱怨 StoredProc3 上的列错误,等等。
我猜这与 SQL Server 如何为 StoredProc1 缓存其执行计划有关,并且依次执行每个存储过程会强制更新存储计划/依赖项。
我怎样才能全面纠正这个问题?
如果我一次执行每个依赖过程,然后执行它起作用的父过程。如果我然后运行这些命令:
CHECKPOINT;
DBCC DROPCLEANBUFFERS;
DBCC FREEPROCCACHE;
并执行父过程我再次收到错误。
存储过程都使用同名的临时表,但如果我理解正确的话,因为它们在不同的过程中,它们将创建单独的表。