繁体   English   中英

特定于服务器的错误:无法绑定多部分标识符

[英]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在架构DBEXISTS可能正在寻找默认的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM