2012-07-10 13 views
5

Jak wykonać następujące zapytanie TSQL w DB2? Mam problem z utworzeniem tabeli tymczasowej na podstawie wyników zapytania.Odpowiednik db2 tabeli temp. Tsql

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

Komunikat o błędzie jest:

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

+0

Jeśli uruchomić błąd w DB2 pojawia się następujący błąd ... "Błąd: SQL0104N nieoczekiwany znak«#TEMP_A»został znaleziony po "". Oczekiwane tokeny mogą zawierać: ":". SQLSTATE = 42601 " –

Odpowiedz

9

Trzeba declare a temp table w DB2, zanim będzie można go używać:

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

następnie wypełnić go:

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 

To nie tak proste jak w SQL Server. :)

Mimo że jest nazywana "globalną" tabelą tymczasową, istnieje tylko dla bieżącej sesji. Należy pamiętać, że wszystkie tabele tymczasowe powinny mieć prefiks ze schematem SESSION. Jeśli nie podasz nazwy schematu, zostanie domniemana SESSION.

+1

Trochę pomocna uwaga: możesz chcieć, aby" w wierszu zachowania zatwierdzania "zawartym jako" w zatwierdzonych wierszach usuwania "było domyślne i że zachowanie może nie być pożądanym. –

+0

@RichardMorgan Lub wszystko działa na tej samej Transakcji. – bhamby

+0

Czy pierwszy bit kodu właśnie definiuje tabelę lub wypełnia ją? Dlaczego istnieje wybór z table_a w definicji? – JSideris

1

być może „z” klauzula jest czego szukać:

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

Być może wyjaśnij, że jest to CTE, a nie tabela tymczasowa. – eaglei22

Powiązane problemy