Triggers 行级触发器(SQL Server 2008 R2)
如果插入一行,触发器工作正常,但如果插入多行,则不会工作。使用SQLServer2008R2,这是一个类项目。Oracle有一个FOR EACH ROW设置,但我在SQL Server中没有找到类似的设置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
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子句就是答案。但我不知道如何接受它。谢谢