比较以下存储过程:
CREATE PROCEDURE testProc1
AS
SELECT * INTO #temp FROM information_schema.tables
SELECT * FROM #temp
GO
CREATE PROCEDURE testProc2
AS
EXEC('SELECT * INTO #temp FROM information_schema.tables')
SELECT * FROM #temp
GO
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行testProc1
,它可以工作,并且#temp
似乎只在该调用期间存在.但是,testProc2
似乎根本不起作用,因为我收到了Invalid object name '#temp'
错误消息.
为什么区别,SELECT * INTO
如果源表名是存储过程的参数并且可以具有任意结构,我如何使用临时表?
请注意,我正在使用Microsoft SQL Server 2005.