web-dev-qa-db-ja.com

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

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

例:

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

ItemBack1の場合、#シンボルを使用する必要がありますか?

そうでない場合、一時テーブルの作成における#の使用は何ですか?

89
Arun CM

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

後でテーブルが必要ない場合は、先に進んで作成してください。一時テーブルは、通常のテーブルに非常によく似ています。ただし、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

148
mobiledaemon

この2つのテーブルItemBack1#ItemBack1の違いは、最初のものは永続的(永続的)であり、もう一方は一時的であるということです。

もう一度質問を見てみると

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

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

14
zzlalani