多部分标识符无法绑定sql

时间:2013-01-31 09:07:49

标签: sql sql-server tsql

我在下面的查询中得到多部分无法绑定错误

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

3 个答案:

答案 0 :(得分:16)

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

拉​​吉

答案 1 :(得分:9)

  

这背后的原因是什么?

UPDATE(和DELETEINSERT)可以影响一个且只有一个表。您已经确定了要在此处影响的表格:

update nfltx

因此, sense 不允许在SET子句中为赋值的左侧设置别名。它们必须是属于先前标识的表的列。

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

答案 2 :(得分:0)

只需使用

update b 

而不是

update nfltx

你们这些人为那些正在学习的人制造的东西太难了。