8

我将如何在 DB2 中执行以下 TSQL 查询?我在根据查询结果创建临时表时遇到问题。

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

错误信息是:

“错误:SQL0104N 在“”之后发现了意外的标记“#TEMP_A”。预期的标记可能包括:“:”。SQLSTATE=42601”

4

3 回答 3

15

您必须先在 DB2 中声明一个临时表,然后才能使用它。使用您正在运行的相同查询:

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

或“手动”定义列:

DECLARE GLOBAL TEMPORARY TABLE SESSION.YOUR_TEMP_TABLE_NAME (
     COLUMN_1 CHAR(10)
    ,COLUMN_2 TIMESTAMP
    ,COLUMN_3 INTEGER
) 

然后填充它:

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将被暗示。

于 2012-07-11T06:19:39.823 回答
3

也许“with”子句就是您要寻找的:

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
于 2014-02-24T10:03:41.787 回答
-5

事实证明,我没有创建临时表的权限。

于 2018-04-23T15:47:43.310 回答