Sql server 为什么我的SQL UPDATE语法给出了';列名称不明确';?

Sql server 为什么我的SQL UPDATE语法给出了';列名称不明确';?,sql-server,sql-update,ambiguous,Sql Server,Sql Update,Ambiguous,我正在使用SQL Server 2014,正在运行以下更新查询: UPDATE ReservationStay SET ReasonForstayCode = b.ReasonForStayCode FROM MissingReasonForStay b WHERE ReservationStayID = b.ReservationStayID 查询的目的是使用“MissingReasonForStay”表中的数据更新“ReservationStay”表中名为“ReasonForSta

我正在使用SQL Server 2014,正在运行以下更新查询:

UPDATE ReservationStay 

SET ReasonForstayCode = b.ReasonForStayCode

FROM MissingReasonForStay b

WHERE ReservationStayID = b.ReservationStayID
查询的目的是使用“MissingReasonForStay”表中的数据更新“ReservationStay”表中名为“ReasonForStayCode”的列。需要使用两个表的“ReservationStayID”列进行查找

问题是SSMS在我的代码第4行的ReservationStayID下面加了下划线,当我运行查询时,我得到一条消息:不明确的列名“ReservationStayID”

我的代码有什么问题吗?

你能试试这个吗:

UPDATE ReservationStay 
SET ReasonForstayCode = b.ReasonForStayCode
FROM ReservationStay a
INNER JOIN MissingReasonForStay b
    ON a.ReservationStayID = b.ReservationStayID;

这是因为
WHERE
子句中的
ReservationStayID
是不合格的,SQL Server无法确定该列属于哪个表

试试这个

UPDATE a
SET ReasonForstayCode = b.ReasonForStayCode
FROM MissingReasonForStay b
INNER JOIN ReservationStay a
ON a.ReservationStayID = b.ReservationStayID

我知道这是一个老问题,但我想我会发布解决方案,因为我在这里没有看到它。在update语句中,您几乎做到了这一点,并且纠正了无法为表名添加别名的问题,因此解决方案是只使用整个表名,而使用别名只是为了缩短时间,以便在编写查询时不必使用整个表名

    UPDATE ReservationStay 
    SET ReservationStay.ReasonForstayCode = b.ReasonForStayCode
    FROM MissingReasonForStay b
    WHERE ReservationStay.ReservationStayID = b.ReservationStayID

我相信这应该可以工作,而不必更改两个表中的列名。

它不知道是哪一个。你定义了b。为什么不定义一个呢?我定义了。但它会给我“集合附近的语法不正确”。从RS a到RS b的更新。。。。?对不起,SQL Server不是我的方言,谢谢。我执行了你的代码,得到了这个错误消息:msg8152,16级,13状态,第4行字符串或二进制数据将被截断。该语句已终止。如果这是正确的,那么sql server对我来说比我意识到的还要陌生。您能检查这两个表的
ReasonForStayCode
列的类型吗?我想第一个比较小。@gotqn我想你是对的。我的'MissingReasonForStay'表的'ReasonForStayCode'列中的字符长度有问题!我会纠正这一点,然后再给你回复。谢谢