Triggers 行级触发器(SQL Server 2008 R2)

Triggers 行级触发器(SQL Server 2008 R2),triggers,sql-server-2008-r2,Triggers,Sql Server 2008 R2,如果插入一行,触发器工作正常,但如果插入多行,则不会工作。使用SQLServer2008R2,这是一个类项目。Oracle有一个FOR EACH ROW设置,但我在SQL Server中没有找到类似的设置 CREATE TRIGGER tgRoom_HotelFloorName ON Room AFTER INSERT AS BEGIN UPDATE Room SET Room.HotelFloorName = ( SELECT HotelFloor.HotelFloorName FROM H

如果插入一行,触发器工作正常,但如果插入多行,则不会工作。使用SQLServer2008R2,这是一个类项目。Oracle有一个FOR EACH ROW设置,但我在SQL Server中没有找到类似的设置

CREATE TRIGGER tgRoom_HotelFloorName
ON Room
AFTER INSERT
AS
BEGIN

UPDATE Room
SET Room.HotelFloorName = (
SELECT HotelFloor.HotelFloorName FROM HotelFloor
JOIN  Inserted
ON HotelFloor.HotelFloorID = Inserted.HotelFloorID
AND Room.RoomID = Inserted.RoomID);

END;
以下是插入3条记录的结果;只更新最后一个。根据SQLServerManagementStudio中的消息,其他两条消息似乎已更新,但随后被覆盖

RoomID  RoomName    HotelFloorID    HotelID HotelFloorName
1          San Diego A       12           2 NULL
2          San Diego B       12           2 NULL
3          Laguna                17           2 Lower Lobby Level, South Tower

感谢您所提供的一切智慧。

您的
UPDATE
没有
WHERE
子句,因此每次触发时都会更新所有行。SQL Server没有针对触发器的
子句;触发器的编写方式必须确保它们能够处理
插入的
和/或
删除的
伪表中的多行。缺少的WHERE子句就是答案。但我不知道如何接受它。谢谢