Sql 创建全局临时表时出现无效的对象名称临时错误
我想将两个表中的数据加载到SQLServer中的临时表中 我正在创建一个从表中获取数据的存储过程。然后创建全局临时表,并将存储过程的结果插入其中 然而,当尝试从临时表中选择数据时,我得到了这个错误 “无效的对象名称临时” 如果是全局临时表,为什么会出现此错误Sql 创建全局临时表时出现无效的对象名称临时错误,sql,sql-server,tsql,temp-tables,Sql,Sql Server,Tsql,Temp Tables,我想将两个表中的数据加载到SQLServer中的临时表中 我正在创建一个从表中获取数据的存储过程。然后创建全局临时表,并将存储过程的结果插入其中 然而,当尝试从临时表中选择数据时,我得到了这个错误 “无效的对象名称临时” 如果是全局临时表,为什么会出现此错误 DROP PROCEDURE usp_GetEmp GO CREATE PROCEDURE usp_GetEmp AS BEGIN SELECT table1.id AS Id , table2.data AS tabl
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
试试这个
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
GO
IF OBJECT_ID('TEMPDB.DBO.##TEMP') IS NOT NULL
DROP TABLE ##TEMP
GO
CREATE TABLE ##TEMP
( ID INT
, VALUE VARCHAR(50))
INSERT INTO ##TEMP
EXEC USP_GETEMP
GO
SELECT *
FROM ##TEMP
全局临时表表明您的设计有点不对劲。它们充满了并发性和范围问题。你要进去吗。否则,您的创建表等都将在过程中。哇,这就是问题所在。我最初没有它有一个全局临时表,但我认为错误是因为它不是,所以我把它改成了一个全局范围。它不再是全球性的,也不再有效。谢谢您确实意识到,由于GO语句的位置,存储过程包含Create Table和Insert Into语句。下面是@Fabiano的功劳。直到现在我才看到他的答案。