访问在父过程中的子过程中声明的#TempTable

时间:2015-05-21 12:18:37

标签: sql sql-server

我有嵌套存储过程,我需要在子过程中创建一个LOCAL TEMP TABLE,并且能够在父过程中使用它。

EX:

父程序:

EXEC ChildProcedure
SELECT * FROM #TempTable

子程序:

CREATE TABLE #TempTable (Field1 VARCHAR(1000),Field2 VARCHAR(1000))
INSERT INTO #TempTable (Field1,Field2) VALUES ('1','2')

当我尝试这个时,SQL说:

  

无效的对象名称' #TempTable'

如果没有GLOBAL TEMP TABLES,有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:4)

好吧,我想我终于在https://msdn.microsoft.com/en-us/library/ms174979.aspx找到了我的问题的答案。

  

存储过程完成后,将自动删除在存储过程中创建的本地临时表。 表可以由创建表的存储过程执行的任何嵌套存储过程引用。调用创建表的存储过程的进程无法引用该表。

所以我自己的问题的答案是否定的。我不能那样做。

最好的方法(如@Damien_The_Unbeliever所说)是在父过程中创建表并在子过程中填充它。

答案 1 :(得分:0)

您可以创建一个像这样的表值函数而不是过程来使用

Create Function ChiledFunction ()
Returns  @TempTable Table  (Field1 VARCHAR(1000),Field2 VARCHAR(1000)) AS 
Begin
INSERT INTO @TempTable (Field1,Field2) VALUES ('1','2')
Return 
end 

和父程序在这里

Create Procedure ParentProc 
As
 begin 
   select * from dbo.ChiledFunction()

end