我想從選擇查詢中創建臨時表(我的表有很多列,因此我不想手動創建臨時表) 我使用以下查詢:如果結果爲空,則無法從選擇查詢創建臨時表
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果該查詢返回空行,它不會產生#TempTable
。因此,我不能將這個#TempTable
用於下一個查詢。
有沒有辦法解決這個問題?
我想從選擇查詢中創建臨時表(我的表有很多列,因此我不想手動創建臨時表) 我使用以下查詢:如果結果爲空,則無法從選擇查詢創建臨時表
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
如果該查詢返回空行,它不會產生#TempTable
。因此,我不能將這個#TempTable
用於下一個查詢。
有沒有辦法解決這個問題?
如果在你的代碼發佈查詢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, ...);
我認爲這是一個錯字,因爲你不能選擇一個表變量。 「SELECT * INTO @TempTable FROM MyTable WHERE 1 <> 1;」會導致錯誤「@TempTable附近的語法不正確」。「」 – brian
@brian - 對不起,是的,現在是一個錯字,我的意思是表名不是表變量。 –
這是因爲要動態地創建和填充臨時表,而不是創建它explicitly.In這種情況下,您必須檢查臨時表的存在,在在創建之前的開始。
試試這個:
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
SELECT * INTO #TempTable FROM MyTable
Select * From #TempTable
查詢
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
將創建一個空表,如果選擇不返回行
以我的經驗,除非你有一個錯誤,這個_will_創建一個臨時表。 –