Sql 使用CTE更新无法识别set子句中的列名
我需要用另一个表中的数据更新现有表。我的CTE给了我正确的结果,但当我试图用CTE更新时,SSMS在Sql 使用CTE更新无法识别set子句中的列名,sql,sql-server,sql-update,common-table-expression,Sql,Sql Server,Sql Update,Common Table Expression,我需要用另一个表中的数据更新现有表。我的CTE给了我正确的结果,但当我试图用CTE更新时,SSMS在 Msg 102, Level 15, State 1, Line 13 Incorrect syntax near '.'. 或以下行中的列名无效: set cm.Action.Identifier_fk = ID set cm.ActionRequestedAction = Action set cm.Action.apartment_fk = apartment_fk 代码如下: Us
Msg 102, Level 15, State 1, Line 13
Incorrect syntax near '.'.
或以下行中的列名无效:
set cm.Action.Identifier_fk = ID
set cm.ActionRequestedAction = Action
set cm.Action.apartment_fk = apartment_fk
代码如下:
Use DB;
GO
with CTE (ID,Action,Identifier_fk,apartment_fk) AS
(select a.ID, a.Action, b.Identifier_fk, m.apartment_fk
from Project.AllSent a (nolock)
left outer join cm.Action b (nolock) on a.ID=b.Identifier_fk
left Outer Join csv.Matching m (nolock) on m.Identifier_fk = a.ID
left outer join csv.Apartment p (nolock) on m.apartment_fk=p.apartment_pk
where b.Identifier_fk is NULL)
update cm.Action
set cm.Action.Identifier_fk = ID
set cm.Action.RequestedAction = Action
set cm.Action.apartment_fk = apartment_fk
from CTE c
JOIN Project.AllSent t (nolock) on t.ID=c.ID;
正确的
update
语句只有一个set
。此外,在from
子句中没有cm
。我打算提议废除CTE:
update b
set Identifier_fk = a.ID,
Action.RequestedAction = a.Action,
apartment_fk = mm.apartment_fk
from Project.AllSent a (nolock) left join
cm.Action b (nolock)
on a.ID = b.Identifier_fk left join
csv.Matching m (nolock)
on m.Identifier_fk = a.ID left join
csv.Apartment p (nolock)
on m.apartment_fk = p.apartment_pk
where b.Identifier_fk is NULL;
我认为最后的
join
是不必要的。正确的update
语句只有一个set
。此外,在from
子句中没有cm
。我打算提议废除CTE:
update b
set Identifier_fk = a.ID,
Action.RequestedAction = a.Action,
apartment_fk = mm.apartment_fk
from Project.AllSent a (nolock) left join
cm.Action b (nolock)
on a.ID = b.Identifier_fk left join
csv.Matching m (nolock)
on m.Identifier_fk = a.ID left join
csv.Apartment p (nolock)
on m.apartment_fk = p.apartment_pk
where b.Identifier_fk is NULL;
我认为最后的
join
是不必要的。在update
查询中cm.Action
是什么?cm-是一个模式,Action-是一个表。我已经有一段时间没有使用SQL Server了,但是你能在一个更新中有多个SET
调用吗?你不是用逗号把它们分开吗?我想你是对的,每次执行只处理一个。我已经尝试过一次执行一个,但我仍然在提示相同的问题。不,更新多列的语法是set col1=1,col2=2,col3=3
什么是cm。在update
query中,Action
是一个模式,Action是一个表。我使用SQL Server已经有一段时间了,但是你能在一次更新中设置多个调用吗?你不是用逗号把它们分开吗?我想你是对的,每次执行只处理一个。我已经尝试过一次执行一个列,但我仍然在提示相同的问题。不,更新多个列的语法是set col1=1,col2=2,col3=3
,我也这么认为,我没有必要。我确实在连接中的From子句中看到了[cm]。你到底指的是什么?不是苏为什么,但这会更新0行。。。有什么想法吗?(0行受影响)我看不到cm
。所有别名都应该引用from
子句中的表。@enigma6205。您正在使用left join
查询要更新的表。这真的没有道理。b
应该是from
子句中的第一个表,或者第一个联接应该是内部联接。我也这样认为,我没有必要。我确实在联接中的from子句中看到了[cm]。你到底指的是什么?不是苏为什么,但这会更新0行。。。有什么想法吗?(0行受影响)我看不到cm
。所有别名都应该引用from
子句中的表。@enigma6205。您正在使用left join
查询要更新的表。这真的没有道理。b
应该是from
子句中的第一个表,或者第一个联接应该是内部联接。