2011-06-16 64 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 

轉到