2012-09-07 53 views
60

我有一個SQL查詢(SQL Server),它會生成報告,我想將精確報告存儲在臨時表中,以便稍後可以使用它。現在問題是我需要先創建臨時表,然後將SQL查詢結果存儲到它中,或者是否有任何方法來動態創建表和存儲查詢結果?SQL查詢結果如何插入臨時表中?

回答

96

SELECT INTO。這將爲您創建一個新表,如果您希望在表名前添加井號(#),則該表可能是臨時表。

例如,你可以這樣做:

SELECT * 
INTO #YourTempTable 
FROM YourReportQuery 
+2

從另一個線程借用'#yourtemptable'不需要先創建。 – JFA

+0

如果YourReportQuery是查詢而不是數據庫表,則這不起作用,並且會在關鍵字'SELECT'附近的語法錯誤中引發錯誤。 –

21

您可以使用select ... into ...創建並填充一個臨時表,然後查詢臨時表返回結果。

select * 
into #TempTable 
from YourTable 

select * 
from #TempTable 
+0

我是否需要在運行該查詢前先創建#TempTable/ – Satish

+10

否,您不需要。如果你想填充一個已經存在的行,你需要使用不同的語法。 –

+0

真棒它的作品! – Satish

2

嘗試:

exec('drop table #tab') -- you can add condition 'if table exists' 
exec('select * into #tab from tab') 
3

在MySQL:

create table temp as select * from original_table 
+0

將temp修改爲#temp不起作用。錯誤信息: 消息156,級別15,狀態1,行中的關鍵字 'AS' 近3 語法不正確。 –

+0

這是一個適用於MySQL和其他可能的結構。 Op沒有指定使用哪種服務器類型,但是由於他稱之爲SQL Server,我猜測它是Microsoft SQL Server。 順便說一句,對於其他需要使用此爲MySQL,@獵人的答案將創建一個新表。要創建一個新的臨時表,你需要添加TEMPORARY關鍵字如下: CREATE TEMPORARY TABLE temptbl AS SELECT ... FROM originaltbl – techdude

0

假設你現有的報告查詢是

Select EmployeeId,EmployeeName from Employee Where EmployeeId>101 order by EmployeeName 

,你必須保存這些數據轉化temparory表,然後你查詢到

Select EmployeeId,EmployeeName into #MyTempTable from Employee Where EmployeeId>101 order by EmployeeName 
相關問題