为什么我的 SQL UPDATE 语法给出 'ambiguous column name'?

Why is my SQL UPDATE syntax giving 'ambiguous column name'?

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

UPDATE ReservationStay 

SET ReasonForstayCode = b.ReasonForStayCode

FROM MissingReasonForStay b

WHERE ReservationStayID = b.ReservationStayID

查询的 objective 是使用来自 'MissingReasonForStay' table 的数据更新 'ReservationStay' Table 中名为 'ReasonForStayCode' 的列。需要使用 table 的 '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服务器无法决定该列属于哪个table。

试试这个

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

我知道这是一个老问题,但我认为我会 post 解决方案,因为我在这里看不到它。你几乎就在那里并且正确地不能在更新语句中为 table 名称起别名,所以解决方案是只使用整个 table 名称,使用别名只是为了缩短事情所以你在编写查询时不必使用整个 table 名称。

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

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

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