O2SS0293:无法转换 set 子句中的列列表(错误)

本文介绍使用列组分配转换 Oracle PL/SQL UPDATE 语句时 Oracle 错误消息的 SQL Server 迁移助手 (SSMA)。

背景

Oracle PL/SQL 允许通过子查询执行多列更新。

SSMA 不支持使用子查询转换 UPDATE 语句,并生成错误。

示例

请考虑以下示例:

CREATE TABLE ACCOUNT
(
    ACCOUNT_ID NUMBER NOT NULL,
    ACCOUNT_OWNER VARCHAR2(30) NOT NULL
);
/

UPDATE
    ACCOUNT
SET
    (ACCOUNT_ID, ACCOUNT_OWNER) = (SELECT 1, 2 FROM dual)
WHERE
    ACCOUNT_ID = 10;

尝试在 SSMA 中转换前面的代码时,它会生成以下错误消息:

O2SS0293:无法转换 set 子句中的列列表

可能的补救措施

上一个语句可以转换为 Transact-SQL,如下所示:

UPDATE
    acct
SET
    acct.ACCOUNT_ID = updtqry.col1,
    acct.ACCOUNT_OWNER = updtqry.col2
FROM
    ACCOUNT acct,
    (SELECT 1 col1, 2 col2) updtqry
WHERE
    acct.ACCOUNT_ID = 10;