sql 触发器

    xiaoxiao2022-07-13  157

    触发器基于表的操作,对表进行增删改时添加触发器。以下sql语句:当对表进行修改操作时,触发器执行,修改表中Inventory的值。(if判断条件-触发器不再执行,必须有出口否则触发器无限执行)

    --创建触发器 触发器名称 CREATE TRIGGER [dbo].[tr_Sduept_Inventory_Update] ON [dbo].[Inventory] AFTER UPDATE --修改操作的触发器 AS BEGIN --修改的触发器 --1 delete 2 insert -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @cInvCode NVARCHAR(60),@iInvSPrice FLOAT,@iInvNCost FLOAT; --SELECT * FROM Deleted; SELECT @cInvCode=cInvCode,@iInvSPrice=Inserted.iInvSPrice,@iInvNCost = Inserted.iInvNCost FROM Inserted; IF (ISNULL(@iInvSPrice,0)<>ISNULL(@iInvNCost,0)) BEGIN --修改表中字段值 UPDATE Inventory SET iInvSPrice=iInvNCost WHERE cInvCode=@cInvCode; --将修改前的数据插入日志表中 INSERT INTO Sduept_Inventory_iInvPrice_Log(cInvCode,iInvSPrice,iInvNCost,CreatedOn,CreatedUser) SELECT Inserted.cInvCode,Inserted.iInvSPrice,Inserted.iInvNCost,getdate(),Inserted.cModifyPerson FROM Inserted END END

    触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。 Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

    Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

    1.插入操作(Insert)  Inserted表有数据,Deleted表无数据  2.删除操作(Delete)  Inserted表无数据,Deleted表有数据  3.更新操作(Update)  Inserted表有数据(新数据),Deleted表有数据(旧数据)

    最新回复(0)