2012-10-19 75 views
-1

我想從選擇查詢中創建臨時表(我的表有很多列,因此我不想手動創建臨時表) 我使用以下查詢:如果結果爲空,則無法從選擇查詢創建臨時表

SELECT * INTO #TempTable 
FROM MyTable 
WHERE ... 

如果該查詢返回空行,它不會產生#TempTable。因此,我不能將這個#TempTable用於下一個查詢。

有沒有辦法解決這個問題?

+0

以我的經驗,除非你有一個錯誤,這個_will_創建一個臨時表。 –

回答

1

如果在你的代碼發佈查詢SELECT * FROM MyTable WHERE ...

SELECT * 
INTO TempTable 
FROM MyTable WHERE ... 

返回行,它創建一個空TempTable,但如果沒有它不會在其填寫的任何數據行匹配WHERE子句。但它應該創建表TempTable至少具有與MyTable相同的結構,它將爲空。

例如這樣的:

SELECT * INTO TempTable FROM MyTable WHERE 1 <> 1; 

總是會創建一個空表TempTable具有相同的結構MyTable因爲謂語1 <> 1永遠是假的。

但是你可以這樣聲明:

DECLARE @Temp TABLE(Field1 int, ...); 
+3

我認爲這是一個錯字,因爲你不能選擇一個表變量。 「SELECT * INTO @TempTable FROM MyTable WHERE 1 <> 1;」會導致錯誤「@TempTable附近的語法不正確」。「」 – brian

+0

@brian - 對不起,是的,現在是一個錯字,我的意思是表名不是表變量。 –

0

這是因爲要動態地創建和填充臨時表,而不是創建它explicitly.In這種情況下,您必須檢查臨時表的存在,在在創建之前的開始。

試試這個:

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL 
BEGIN 
    DROP TABLE #TempTable 
END 

SELECT * INTO #TempTable FROM MyTable 
Select * From #TempTable 
0

查詢

SELECT * INTO #TempTable 
FROM MyTable 
WHERE ... 

將創建一個空表,如果選擇不返回行