我将如何在 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
将被暗示。
也许“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
事实证明,我没有创建临时表的权限。