2011-06-16 57 views
-1

这里是我的代码面临的问题结果放入临时表

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 错误,如果我写这样的线在begining创建表#tab(INT DEPTID ,DeptName VARCHAR(255)),那么我没有收到错误。

所以请告诉我我的代码有什么问题。我可以用存储过程填充临时表,并用列定义声明临时表。

+0

你想填充一个临时表与存储过程的结果而不必先创建表格定义?基本上,一个动态创建的临时表? – codingbadger 2011-06-16 07:57:48

回答

3

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

还有就是

SELECT * INTO #temptable FROM AnotherTable 

非简单的版本,没有直接的当量(阅读所有关于"How to Share Data Between Stored Procedures"坏的东西。而且simpler)将

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

什么是循环回到这里没有什么办法解决了这个问题.... thanks.alter程序测试1为 从部门选择DEPTID,DEPTNAME 去 ALTER PROCEDURE test2的作为 SELECT * INTO #tab FROM OPENROWSET('SQLNCLI ','server = 192.168.1.12 \ bbareman; trusted_connection = yes', 'set fmtonly off exec MyTest.dbo.test1') select * from #tab drop table #tab go – Mou 2011-06-16 08:37:24

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 

转到