SQL Serverでは、一時テーブルは同じCREATE TABLE
を使用して作成されます 通常のテーブルとしての構文。違いは、一時テーブルの名前の前に1つまたは2つの数字記号(#
)が付いていることです。 )、ローカル一時テーブルかグローバル一時テーブルかに応じて:
- ローカル一時テーブル 接頭辞として単一の番号記号(
#
) - グローバル一時テーブル 接頭辞として二重番号記号(
##
)
例1-ローカル一時テーブルを作成する
ローカル一時テーブルを作成する例を次に示します。
CREATE TABLE #Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
ローカル一時テーブルに指定する名前は、最大116文字です。他のテーブルタイプは128文字にすることができますが、ローカル一時テーブルには、システムで生成された数値のサフィックスが自動的に追加されます。
例2–グローバル一時テーブルの作成
グローバル一時テーブルを作成する例を次に示します。
CREATE TABLE ##Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
グローバル一時テーブル名は、最大128文字にすることができます。 SQL Serverは、ローカル一時テーブルの場合のように、システムで生成された数値サフィックスをグローバル一時テーブルに追加しないため、スペース全体を使い切ることができます。
例3–一時テーブルを表示する
次のクエリを実行して、新しく作成した一時テーブルを確認できます。
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#Cats%' OR name = '##Cats';
結果:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | +----------------------------------------------------------------------------------------------------------------------------------+
ローカル一時テーブルにシステム生成の数値サフィックスが追加されていることがわかります。これが、クエリでLIKE
を使用する理由です。 そのテーブルの演算子。
例4–新しいセッション
新しいセッションを開き、同じ名前(Cats)でローカル一時テーブルを作成してから、このクエリを再度実行すると、次のようになります。
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | +----------------------------------------------------------------------------------------------------------------------------------+
したがって、SQL Serverはサフィックスをインクリメントしてその名前を変更するため、複数のセッションで同じ名前のローカルテーブルを作成できます。
例5–同じセッション
ただし、同じでローカル一時テーブルを再度作成しようとすると セッション、私はこれを取得します:
Msg 2714, Level 16, State 6, Line 1 There is already an object named '#Cats' in the database.
さらに別のセッションを開くと成功し、tempdb.sys.tables
にクエリを実行すると成功します 私はこれを手に入れました:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | | #Cats_______________________________________________________________________________________________________________00000000001B | +----------------------------------------------------------------------------------------------------------------------------------+