代码如下:
update wy_dhmx set a.dhmx_cgdj=b.wzbm_jhdj from wy_dhmx a,wj_wzbm b where a.dh_id in(select dh_id from wy_dh where dh_tzrq>'2015-01-01 00:00:00.000') and a.dhmx_yssl<0 and a.dhmx_sssl<0 and a.dhmx_zjsl<0 and a.dhmx_cgdj<>b.wzbm_jhdj and a.wzbm_id=b.wzbm_id
报错如下:
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "a.dhmx_cgdj"。
求大神解释
------解决思路----------------------
因为 UPDATE 语句后面的表名是 wy_dhmx,所以要求 SET 后面的字段必须是属于 wy_dhmx 的。
建议被更新的目标表不加别名。
考虑自表更新时 wy_dhmx 可以在 FROM 中出现多次,哪个别名代表了更新的目标就不确定了。比如下面这样的语句
UPDATE wy_dhmx
SET a.x = c.x,
b.y = c.y
FROM wy_dhmx a,
wy_dhmx b,
wj_wzbm c
...
------解决思路----------------------
“a. “ 感觉像 ”形参“,只能用不能改。大概是这个意思。
从语法上说
既然 ”UPDATE wy_dhmx“
那么 set 后面的必然是” wy_dhmx“的字段,所以不用再加其他标识符了
------解决思路----------------------
update wy_dhmx set a.dhmx_cgdj=b.wzbm_jhdj from wy_dhmx a
改成
update a set a.dhmx_cgdj=b.wzbm_jhdj from wy_dhmx a
-- PS:没有2014,没测试
------解决思路----------------------
update a set a.dhmx_cgdj=b.wzbm_jhdj from wy_dhmx a,wj_wzbm b where a.dh_id in(select dh_id from wy_dh where dh_tzrq>'2015-01-01 00:00:00.000') and a.dhmx_yssl<0 and a.dhmx_sssl<0 and a.dhmx_zjsl<0 and a.dhmx_cgdj<>b.wzbm_jhdj and a.wzbm_id=b.wzbm_id