SQLサーバーで一時テーブルを作成するために#を使用する必要がありますか?


91

#SQLサーバーで一時テーブルを作成する前に使用する必要がありますか?

例:

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

ItemBack1の場合、#記号を使用する必要がありますか?

そうでない場合、#一時テーブルを作成する際に何を使用しますか?


3
はい。#一時テーブルを作成します。それなしではテーブルを作成します。
Jeow Li Huan 2013

回答:


151

はい。一時テーブルを作成するには、テーブル名の前に "#"(ハッシュ)を付ける必要があります。

後でテーブルが必要ない場合は、先に進んで作成してください。一時テーブルは通常のテーブルとよく似ています。ただし、tempdbで作成されます。また、現在のセッションを介してのみアクセスできます。つまり、EGの場合:別のユーザーがあなたが作成した一時テーブルにアクセスしようとすると、そのユーザーはアクセスできなくなります。

"##"(ダブルハッシュは、他のセッションからもアクセスできる "グローバル"一時テーブルを作成します。

一時テーブルの基本については、以下のリンクを参照してください。http//www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

テーブルのコンテンツが5000行未満で、nvarchar(MAX)、varbinary(MAX)などのデータ型が含まれていない場合は、テーブル変数の使用を検討してください。

それらは、RAMに格納されている他の変数と同じように最速です。 それらはRAMではなくtempdbにも保存されます

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

8
変数テーブルはRAMに格納されず、tempdbにも格納されます。行数が自動的に1に設定され、悪い計画が生じる可能性があるため、いくつかの欠点を理解していない限り、テーブル変数を使用しないことをお勧めします。
ConstantineK

5000行のソース、nvarchar(max)、varbinary(max)の制限を指定できますか?これは許可されていますが、推奨されない理由がわかりません。
Brad

1
私もテーブル変数がメモリに格納されていると思いました。私は正しいと思います:dba.stackexchange.com/a/16386/23720
Baodad

1
テーブル変数がtempdbに格納されているのは事実であることもコメントするつもりです。私はコメントしているので、多分もっと多くの人がコメントを読んで頭の中でそれを得るでしょう。私はフォーチュン500で何十社もの企業について話しているので、人々のコメントを見て喜んでいます。悲しいことに、質問に答えるこのOPが実際に回答を編集しない限り、この無知が今後10年間も持続します。
トム

14

この2つのテーブル間の差ItemBack1とは、#ItemBack1第一には、他の一時的なものであるとしてここで永続的(パーマネント)であることです。

今あなたの質問をもう一度見てみましょう

SQLサーバーで一時テーブルを作成するために#を使用する必要がありますか?

答えは「はい」です。これ#がないと、テーブルは一時テーブルにならないため、すべてのセッションとスコープから独立しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.