16

我在以下查询中得到 multipart can not be bound 错误

update nfltx
set 
b.boxno = a.boxno,
b.message = a.message,
b.nameboxno = a.nameboxno,
b.namemsg = a.namemsg,
b.phoneboxno = a.phoneboxno,
b.phonemsg = a.phonemsg

FROM ofltx a JOIN nfltx b 
ON a.ls_fullnam = b.ls_fullnam

但是如果我从 boxno 消息中删除 b 并且我没有得到错误。这背后的原因是什么。谢谢你使用 sql server 2008

4

3 回答 3

17

FROM 子句中指定的表别名不能用作 SET column_name 中的限定符。这是无效的:

update nfltx
set 
b.boxno = a.boxno,
b.message = a.message,
b.nameboxno = a.nameboxno,
b.namemsg = a.namemsg,
b.phoneboxno = a.phoneboxno,
b.phonemsg = a.phonemsg

FROM ofltx a JOIN nfltx b 
ON a.ls_fullnam = b.ls_fullnam

要使其工作,请删除 b。列名的别名。

update nfltx
set 
boxno = a.boxno,
message = a.message,
nameboxno = a.nameboxno,
namemsg = a.namemsg,
phoneboxno = a.phoneboxno,
phonemsg = a.phonemsg

FROM ofltx a JOIN nfltx b 
ON a.ls_fullnam = b.ls_fullnam

拉吉

于 2013-01-31T09:14:03.900 回答
9

这背后的原因是什么?

一个UPDATE(and DELETE, INSERT) 可以影响一个且仅一个表。您已经在此处确定了要影响的表:

update nfltx

因此,在子句中允许左侧赋值的别名是没有意义的。SET它们必须是属于先前标识的表的列。

如果同一个表多次包含在FROM子句中(并且它是您希望更新的表),您需要提供一个别名来指示要更新的表的哪个实例 - 但您需要提供它(一次)在UPDATE从句中而不是在SET从句中。

于 2013-01-31T10:02:07.487 回答
0

只需使用

update b 

代替

update nfltx

伙计,你们让那些正在学习的人太难了。

于 2016-08-13T03:24:17.087 回答