我有嵌套存储过程,我需要在子过程中创建一个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,有没有办法实现这个目标?
答案 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