2017-03-26 158 views
4

如何創建類似於創建普通表的臨時表?如何使用SQL Server中的Create語句創建臨時表?

例子:

CREATE TABLE table_name 
(
    column1 datatype, 
    column2 datatype, 
    column3 datatype, 
    .... 
); 
+1

之前表名 – Hadi

+0

https://www.simple-talk.com/sql/t-sql-programming/temporary只需添加''# -tables-in-sql-server/ – Hadi

+0

我投票結束這個問題作爲題外話,因爲它可以通過一個簡單的谷歌搜索回答 – alroc

回答

7

臨時表可以有3種,#是最常用的。這是隻存在於當前會話中的臨時表。 與此相當的是@,這是一個聲明的表變量。這有一點「功能」(如索引等),也只用於當前會話。 ###相同,但範圍更寬,因此您可以在同一個會話中,在其他存儲過程中使用它。

您可以通過多種方式創建臨時表:

declare @table table (id int) 
create table #table (id int) 
create table ##table (id int) 
select * into #table from xyz 
+0

* session *的用法不正確... @ @ table是 - 像任何變量 - 綁定到一個作業。它會通過一個'GO'消失,而一個被稱爲SP的函數不知道它。一個'#表'將存在於一個會話中,即使是在一個被調用的SP或函數中,而一個'## table'可以從不同的會話到達。 – Shnugo

+1

另外,表變量不是臨時表。閱讀Martin Smith的[關於DBO.StackExchange的帖子](http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql -server/16386#16386)。 –

+0

由於缺乏索引和統計信息,表變量往往會導致執行計劃不佳。它們的範圍是當前**批次**,而不是「作業」或會話。雖然他們有它們的用途,但他們通常不是臨時表的最佳選擇。 – alroc

10

同樣的事情,只是###啓動表名:

CREATE TABLE #TemporaryTable -- Local temporary table 
(
    Col1 int, 
    Col2 varchar(10) 
    .... 
); 

CREATE TABLE ##GloablTemporaryTable -- Gloabl temporary table - note it starts with ##. 
(
    Col1 int, 
    Col2 varchar(10) 
    .... 
); 

臨時表的名字開始與### - 第一個是本地臨時表最後一個是全球臨時表。
Here是描述它們之間差異的許多文章之一。

+0

我投了你的票。被接受的答案有一些缺陷... – Shnugo

相關問題