2017-03-26 13 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

私は簡単なGoogleの検索で答えることができるので、オフトピックとしてこの質問を閉じることに投票しています – alroc

答えて

7

一時テーブルは3種類ありますが、#が最も使用されます。これは、現在のセッションにのみ存在する一時テーブルです。 これに相当するのは、宣言された表変数@です。これは、 "関数"(索引など)が少ししかなく、現在のセッションでのみ使用されます。 ###と同じものですが、スコープが広いので、他のストアドプロシージャ内で同じセッション内で使用することができます。

あなたはさまざまな方法で一時テーブルを作成することができます。

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

*セッション*の使用法は正しくありません。一つのジョブにバインドされた変数のように '@テーブル 'はあります。 'GO'と呼ばれるSPで消えるか、関数がそれを知らない。 '#table 'は、呼び出されたSPや関数であっても、1つのセッション内に存在し、異なるセッションからは' ## 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は、それらの違いを説明する多くの記事の1つです。

+0

私はあなたに投票しました。受け入れられた答えにはいくつかの欠陥があります... – Shnugo

関連する問題