2012-07-10 18 views
5

DB2で次のようなTSQLクエリを実行するにはどうすればよいですか?クエリの結果に基づいて一時テーブルを作成する際に問題が発生しています。db2のtsqlのテンポラリテーブル

SELECT 
COLUMN_1, COLUMN_2, COLUMN_3 
INTO #TEMP_A 
FROM TABLE_A 
WHERE COLUMN_1 = 1 AND COLUMN_2 = 2 

エラーメッセージは次のとおりです。

"Error: SQL0104N An unexpected token "#TEMP_A" was found following "". Expected tokens may include: ":". SQLSTATE=42601"

+0

私はDB2のエラーを実行する場合、私は次のエラーを取得する... "エラー:SQL0104N予期しないトークン『#TEMP_A』が発見されました":" SQLSTATE = 42601 " –

答えて

9

あなたがそれを使用する前に、DB2にdeclare a temp tableにあります

DECLARE GLOBAL TEMPORARY TABLE SESSION.YOUR_TEMP_TABLE_NAME AS (
    SELECT COLUMN_1, COLUMN_2, COLUMN_3 
    FROM TABLE_A 
) DEFINITION ONLY 

そして、それを移入:

INSERT INTO SESSION.YOUR_TEMP_TABLE_NAME 
SELECT COLUMN_1, COLUMN_2, COLUMN_3 
FROM TABLE_A 
WHERE COLUMN_1 = 1 
    AND COLUMN_2 = 2 

にですそれほど単純ではないSQL Serverで。 :)

「グローバル」テンポラリテーブルと呼ばれますが、現在のセッションにのみ存在します。すべての一時表に接頭辞としてSESSIONスキーマを付ける必要があります。スキーマ名を指定しないと、SESSIONが暗黙指定されます。多分

+1

少し参考にしてください:"コミット削除行 "として"コミット時に行を保存する "がデフォルトであり、その動作がそうでない場合があります望ましい。 –

+0

@RichardMorganまたは、すべてが同じトランザクションで実行されている。 – bhamby

+0

そこにある最初のビットは、テーブルを定義するだけですか?なぜ定義内にtable_aの選択がありますか? – JSideris

1

「と」節はあなたが何を見ている:

with TEMP_A as (
    SELECT COLUMN_1, COLUMN_2, COLUMN_3 
    FROM TABLE_A 
    WHERE COLUMN_1 = 1 AND COLUMN_2 = 2 
) 
-- now use TEMP_A 
select * from TEMP_A 
+1

これはCTEであり、一時テーブルではないことを明らかにしているかもしれません。 – eaglei22

関連する問題