Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将多部分标识符绑定到sql_Sql_Sql Server_Tsql - Fatal编程技术网

无法将多部分标识符绑定到sql

无法将多部分标识符绑定到sql,sql,sql-server,tsql,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 但是如果我

以下查询中出现“我获取多部分无法绑定”错误

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 message中删除b,那么我就不会得到错误。这背后的原因是什么。感谢您使用sql server 2008

FROM子句中指定的表别名不能用作SET列_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
拉吉

这背后的原因是什么

一个
更新
(和
删除
插入
)可以影响一个表,而且只能影响一个表。您已经确定了要在此处影响的表:

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

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

只需使用

update b 
而不是

update nfltx

伙计们,你们这些家伙让正在学习的人觉得事情太难了。

更新
部分,使用您为
nfltx
作为b
)提供的表别名。这应该可以解决问题。我认为当您混合使用表名和预期别名时会出现这种情况…@Killercam-您的意思是将查询写为UPDATE nfltx as b SET。。。?我认为这是不允许的。我更喜欢你的答案,因为你解释了为什么它不起作用。有没有任何官方文件提到这种惯例?