2012-07-10 75 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「 – 2012-07-10 23:07:50

回答

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

有點有用的注意:你可能希望有」提交保留行「包含在」on commit delete rows「是默認的,並且行爲可能不會是可取的。 – 2013-04-22 15:10:10

+0

@RichardMorgan或者讓所有事情都在同一個交易中運行。 – bhamby 2013-04-24 22:09:11

+0

那裏的第一位代碼是隻定義了表還是填充它?爲什麼在定義中有來自table_a的選擇? – JSideris 2014-04-07 04:08:31

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 2017-08-15 20:36:49