通常のテーブルを作成するのと同じように一時テーブルを作成するにはどうすればよいですか?SQL ServerでCreateステートメントを使用して一時テーブルを作成する方法?
例:
CREATE TABLE table_name
(
column1 datatype,
column2 datatype,
column3 datatype,
....
);
通常のテーブルを作成するのと同じように一時テーブルを作成するにはどうすればよいですか?SQL ServerでCreateステートメントを使用して一時テーブルを作成する方法?
例:
CREATE TABLE table_name
(
column1 datatype,
column2 datatype,
column3 datatype,
....
);
一時テーブルは3種類ありますが、#
が最も使用されます。これは、現在のセッションにのみ存在する一時テーブルです。 これに相当するのは、宣言された表変数@
です。これは、 "関数"(索引など)が少ししかなく、現在のセッションでのみ使用されます。 ##
は#
と同じものですが、スコープが広いので、他のストアドプロシージャ内で同じセッション内で使用することができます。
あなたはさまざまな方法で一時テーブルを作成することができます。
declare @table table (id int)
create table #table (id int)
create table ##table (id int)
select * into #table from xyz
*セッション*の使用法は正しくありません。一つのジョブにバインドされた変数のように '@テーブル 'はあります。 'GO'と呼ばれるSPで消えるか、関数がそれを知らない。 '#table 'は、呼び出されたSPや関数であっても、1つのセッション内に存在し、異なるセッションからは' ## table'に到達することができます。 – Shnugo
また、表変数は一時表ではありません。 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)を参照してください。 –
テーブル変数は、インデックスと統計情報が不足しているため、しばしば実行計画が悪くなる可能性があります。それらは現在の**バッチ**にスコープされ、「ジョブ」またはセッションにはスコープされません。彼らは用途がありますが、しばしばテンポラリテーブルと比べて最良の選択肢ではありません。 – alroc
同じこと、ジャスト#
または##
でテーブル名を起動します。
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つです。
私はあなたに投票しました。受け入れられた答えにはいくつかの欠陥があります... – Shnugo
をジャスト – Hadi
https://www.simple-talk.com/sql/t-sql-programming/temporaryテーブル名の前に '#'を追加-tables-in-sql-server/ – Hadi
私は簡単なGoogleの検索で答えることができるので、オフトピックとしてこの質問を閉じることに投票しています – alroc