请考虑以下存储过程:
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窗口中并且在相同的连接之前运行
注意-我意识到在完成临时表后删除临时表是很重要的
答案 0 :(得分:0)
这是因为您可以在范围内创建一次#Temp表。当您两次调用SP时,SP在单独的范围内运行,因此不会出错。但是,当您在单个作用域中执行两次相同的操作时,会得到该错误。