本文介绍使用列组分配转换 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;