2013-05-25 141 views
78

在SQL Server中創建臨時表之前是否需要使用#是否需要使用#來在SQL Server中創建臨時表?

實施例:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2 
WHERE table2.ID = 7 

對於ItemBack1是它需要使用#符號?

如果不是,那麼#在創建臨時表時有什麼用處?

+3

是的。 #創建臨時表。沒有它創建一個表。 –

回答

130

是的。你需要在表名前添加「#」(散列)來創建臨時表。

如果您以後不需要該表,請繼續&創建它。 臨時表格非常像普通表格。但是,它是在tempdb中創建的。 此外,它只能通過當前會話訪問,即對於EG:如果其他用戶試圖訪問由您創建的臨時表,他將無法這樣做。

「##」(雙散列創建一個可以被其他會議以及訪問「環球」臨時表

請參考下面的鏈接,臨時表的基礎知識: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

如果表的內容少於5000行&不包含數據類型,如nvarchar(MAX),varbinary(MAX),考慮使用表變量。

它們是最快的,因爲它們就像任何其他變量它們存儲在內存。They are stored in tempdb as well, not in RAM

DECLARE @ItemBack1 TABLE 
(
column1 int, 
column2 int, 
someInt int, 
someVarChar nvarchar(50) 
); 

INSERT INTO @ItemBack1 
SELECT column1, 
     column2, 
     someInt, 
     someVarChar 
    FROM table2 
WHERE table2.ID = 7; 

表變量的更多信息: http://odetocode.com/articles/365.aspx

+11

在SQL Server中,SELECT語法是INSERT INTO @ ItemBack1 SELECT column1,column2,someInt,someVarChar FROM table2 WHERE table2.ID = 7 – mhenry1384

+7

變量表不存儲在RAM中,它們也存儲在tempdb中。我建議不要使用表變量,除非你瞭解它們的一些缺點,因爲它們的行數會自動設置爲1,並且可能會導致錯誤的計劃。 – ConstantineK

+0

您可以給5000行,nvarchar(max),varbinary(max)限制的來源嗎?這是允許的,但我不知道爲什麼不推薦。 – Brad

11

的差值表和#ItemBack1之間這兩ItemBack1是,在所述第一持續存在(永久),其中作爲另一種是暫時的。

現在,如果再看看你的問題

是否有必要使用#在SQL Server中創建臨時表?

答案是,因爲如果沒有這個前#該表將不會是一個臨時表,這將是獨立於所有會話和範圍的。

相關問題