我可以在没有声明表的情况下从SP插入临时表吗?

时间:2011-06-16 07:49:29

标签: sql-server tsql

这是我的代码:

alter procedure test1 as
select DeptID,DeptName from Department
go

alter procedure test2 as
--Create Table #tab (DeptID INT, DeptName VARCHAR(255))
INSERT INTO #tab
exec test1
select * from #tab
drop table #tab
go

exec test2

我收到类似“无效的对象名称#tab”

的错误

如果我在开头Create Table #tab (DeptID INT, DeptName VARCHAR(255))添加,那么我不会收到任何错误。

我的代码有什么问题?我可以在不声明临时表及其列定义的情况下从存储过程的结果中填充临时表吗?

2 个答案:

答案 0 :(得分:3)

从存储过程加载临时表时,必须先创建表。

没有简单的等效

SELECT * INTO #temptable FROM AnotherTable

非直截了当的版本(阅读"How to Share Data Between Stored Procedures"上的所有错误内容。simpler

SELECT * INTO #temptable FROM OPENQUERY(Loopback, 'exec test1')

答案 1 :(得分:1)

这是因为您期望的本地临时表#tab在会话中不存在。

因此表创建不应该是注释行。

Create Table #tab (DeptID INT, DeptName VARCHAR(255))

此外,如果您不想创建表格,那么它应该如下所示

Alter procedure test2 
As
Set NoCount ON
IF OBJECT_ID('tempdb..#tab') IS NOT NULL
Begin
    Drop table #temp
End

SELECT DeptID, DeptName INTO #tab from Department
Select * from #tab
Drop table #tab

开始