我该如何在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"
我该如何在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"
在使用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
。
SELECT
仅获取这些列的定义,并使用相同的名称、数据类型等在临时表中创建列。在我看来,IBM 有点缺乏远见,不允许您同时定义和填充临时表。 - bhambywith 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
事实证明,我没有创建临时表的权限。