[英]Server-specific error: The multi-part identifier could not be bound
我在不同服务器上的相同数据库上运行一些脚本。
虽然脚本在大多数脚本上成功运行,但在某些情况下,我收到此错误:
UPDATE DB.T1
SET SONUM = 0
WHERE SONUM <> 0
AND NOT EXISTS (
SELECT SERVICEORDER
FROM DB.T2
WHERE SERVICEORDER = T1.SONUM
)
无法绑定多部分标识符
T1.SONUM
我的问题是,为什么它在某些服务器上运行成功但不是全部? 我该如何解决?
我可以用这个替换上面的查询吗?:
UPDATE DB.T1
SET SONUM = 0
WHERE SONUM NOT IN (
SELECT SERVICEORDER
FROM DB.T2
)
AND SONUM <> 0
您可能会收到错误的原因是表之间的列名不一致。 “SONUM”列需要存在于您正在运行此表的每个表中。
检查表模式后,如果您决定仍要进行这些更新。 以下查询应该在没有子查询的情况下执行相同的操作。
它将DB.T1的SONUM更新为每个当前不为0的记录,并且没有来自DB.T2的相关SERVICEORDER。
首先,使用select语句预览要更新的列是个好主意。 将遵循实际更改它们的更新语句。
SELECT DB.T1.SONUM
, DB.T2.SERVICEORDER
FROM DB.T1
LEFT JOIN DB.T2
ON DB.T1.SONUM = DB.T2.SERVICEORDER
WHERE DB.T2.SERVICEORDER IS NULL
AND DB.T1.SONUM <> 0
并更新......
UPDATE DB.T1
SET SONUM = 0
FROM DB.T1
LEFT JOIN DB.T2
ON DB.T1.SONUM = DB.T2.SERVICEORDER
WHERE DB.T2.SERVICEORDER IS NULL
AND DB.T1.SONUM <> 0
给你的表一个别名。 看起来T1
在架构DB
, EXISTS
可能正在寻找默认的DBO
。
尝试这个:
UPDATE T
SET SONUM = 0
FROM DB.T1 T
WHERE SONUM <> 0
AND NOT EXISTS (SELECT SERVICEORDER
FROM DB.T2
WHERE SERVICEORDER = T.SONUM)
注意:当然,将其转换为选择并确保在更新之前获得正确的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.