在另一个存储过程中填充SQL #LocalTemp表范围

问题描述 投票:1回答:2

我希望在一个会话中更好地理解存储过程中的#Temptable范围。我的理解是#TempTable具有创建它的当前会话的本地范围。我所追求的是在存储过程1中创建一个临时表,然后将其填入另一个我将在sp 1中调用的sp2中。这样我将在sp1中使用完整的表(sp2中填充的数据)。现在它似乎工作正常,但我不确定是否有任何隐藏的问题,我可能会看到。任何人都有任何想法?我使用这种方法的原因是我不能使用insert exec嵌套语句(sp2已经调用insert到exec)。在此先感谢以下是我的代码逻辑示例,用于澄清问题

create table #TempToBeFilledInAnotherSp(
    col1 int,
    col2 int
);
exec spe2 param1, param2;--this sp will insert data in #TempToBeFilledInAnotherSp

--Now that I have all the data in temp table which I created here I can use it
select * from #TempToBeFilledInAnotherSp;--or do my further processing on the data
sql sql-server
2个回答
0
投票

如果在存储过程之外创建了#temp表,则它将作用于会话,并且对该会话中的任何执行上下文都是可见的。

但是,如果在存储过程中创建了#temp表,那么它只限于该执行上下文,并且只对该执行上下文及其创建的任何执行上下文(它调用的其他存储过程)可见。

简而言之,如果在存储过程中创建一个#temp表,那么只要该存储过程退出,它就会被删除。

如果要在一个存储过程中创建#temp表并使其在另一个存储过程中可见,唯一的方法是让第一个存储过程调用第二个存储过程(或调用调用另一个存储过程的存储过程) ,调用另一个,...等...,调用你想要使用#temp表的存储过程。


-1
投票

#Temp表是创建它们的连接的本地表。其他连接无法访问它们,并且当连接关闭时,它们将被丢弃。

在同一连接中执行的所有代码都可以访问在该连接中创建的临时表,即使代码出现在不同的过程调用,不同的事务等中。这将一直存在,直到连接关闭或临时表被显式删除。

© www.soinside.com 2019 - 2024. All rights reserved.