存储过程可以重新使用临时表,但原始查询不能

时间:2018-08-10 15:57:53

标签: sql-server sql-server-2016

请考虑以下存储过程:

CREATE PROCEDURE spTest
AS
BEGIN
    SELECT * INTO #Test FROM [orders] 
    SELECT * FROM #Test
    -- notice no cleanup of temp table 
END

在SSMS中,我可以这样做:

spTest
GO
spTest
GO

我得到两个结果集

但是,如果我这样做:

SELECT * INTO #Test FROM [orders]
SELECT * FROM #Test
GO

SELECT * INTO #Test FROM [orders]
SELECT * FROM #Test
GO

我收到一个临时表已经存在的错误。

为什么在存储过程中我不必清理临时表,而在原始查询中呢?

以上查询在相同的SSMS窗口中并且在相同的连接之前运行

注意-我意识到在完成临时表后删除临时表是很重要的

1 个答案:

答案 0 :(得分:0)

这是因为您可以在范围内创建一次#Temp表。当您两次调用SP时,SP在单独的范围内运行,因此不会出错。但是,当您在单个作用域中执行两次相同的操作时,会得到该错误。