【发布时间】:2017-11-09 02:23:08
【问题描述】:
我有几个表中的数据,我想将它们加载到 SQL Server 中的临时表中。
我正在创建一个从表中获取数据的存储过程。然后我创建全局临时表并将存储过程的结果插入其中。
但是,当尝试从临时表中选择数据时,出现此错误 '无效的对象名称##Temp'
如果是全局临时表,为什么会出现此错误?
DROP PROCEDURE usp_GetEmp
GO
CREATE PROCEDURE usp_GetEmp
AS
BEGIN
SELECT table1.id AS Id
, table2.data AS table2_value
FROM table1 INNER JOIN table2
ON table1.id = table2.table1_id
WHERE table2.data = 1
END
CREATE TABLE ##Temp
( Id Int
, Value varchar(50))
INSERT INTO ##Temp
EXEC usp_GetEmp
GO
SELECT *
FROM ##Temp
【问题讨论】:
-
全局临时表表明您的设计有些偏差。它们充满了并发性和范围问题。你那里有一个GO。否则,您的创建表等都将在过程中。
-
哇,这就是问题所在。我最初没有它有一个全局临时表,但我认为错误是因为它不是所以我将它更改为全局范围。它不再是全球性的并且有效。谢谢!
-
您确实意识到您的存储过程包含
Create Table和Insert Into语句,因为您的GO语句在哪里。归功于下面的@Fabiano。直到现在我才看到他的回答。
标签: sql sql-server tsql temp-tables