【发布时间】:2021-08-06 22:05:19
【问题描述】:
我有一个现有的 Oracle 更新语句,我正在尝试将其转换为 SQL Server 更新语句。
我已经将 SQL 从 Oracle 函数转换为 SQL Server 函数,如下所示。
但是当我运行这个查询时,它无法理解 SQL 语句中的别名 a。它出错了
消息 102,级别 15,状态 1,第 1 行
'a' 附近的语法不正确
代码:
UPDATE related_opty_plan_n_dim a
SET a.days_to_create_interlock = (SELECT COUNT(*)
FROM date_dim b
LEFT JOIN plan_n_dim p ON a.plan_key = p.plan_key
WHERE b.cal_date >= CAST(p.createddate AS DATE)
AND b.cal_date <= CAST(a.createddate AS DATE)
AND b.weekday_flag = 'Y');
【问题讨论】:
-
检查 SET 语句是否可以接收正在更新的列的别名。认为去掉“a”。 “SET a.days_to create_interlock ...”中的表别名可以解决你的问题。不能保证 - 但您只更新一个表,它不需要在 SET 构造的左侧使用别名。另一种选择可能是 UPDATE 语句的格式不符合 SQL Server 的语法规则。您可能需要使用 UPDATE x FROM (......) SET ... 语法。
-
但我正在使用列与更新表中的第二个和第三个表连接。
-
认为删除“a”。 “SET a.days_to create_interlock ...”中的表别名。只建议你删除那个单一的“a”。实例。没有其他人。请参阅@lptr 的回答。
标签: sql sql-server oracle