sql server-我可以在不声明表的情况下从SP插入到临时表中吗



这是我的代码:

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))的开头添加,那么我不会得到任何错误。

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

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

没有直接的等价物

SELECT * INTO #temptable FROM AnotherTable

非直接版本(阅读"如何在存储过程之间共享数据"中的所有糟糕内容。更简单)将是

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

这是因为您期望的本地临时表#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

转到

最新更新