我有一个奇怪的问题。我有一个内部调用另一个过程的存储过程。这已经有一段时间没有问题了。现在,当我更改内部存储过程并重新编译它时,外部过程会跳过内部过程并抛出错误。我已经尝试过调试它,它只是跨过内部过程而不是它。
然而,真正奇怪的是,如果我然后通过Excel或SMSS客户端自行运行内部过程。然后外部proc将开始正确运行。我试图将WITH RECOMPILE添加到过程调用中,并且行为有任何变化。关于发生了什么的任何想法?
答案 0 :(得分:1)
如果在两个过程中都有#temp
个具有相同名称的表,则会发生这种情况。
在这种情况下重命名它们以避免命名冲突。以下是一个例子。
CREATE PROC P2
AS
SELECT 1 AS Y INTO #T
SELECT Y FROM #T
GO
CREATE PROC P1
AS
SELECT 1 AS X INTO #T
EXEC P2
GO
EXEC P2; /*Run P2 first so the plan is cached*/
EXEC P1; /*This executes fine*/
EXEC sp_recompile 'P2' /*Mark P2 for recompilation*/
EXEC P1 /* Attempt to recompile P2 fails with "Invalid column name
'Y' as a table called #T without this column already exists at outer scope."*/