sql 触发器

SQL触发器是在数据库中对表进行增删改操作时执行的特殊程序,用于自动响应这些操作。在触发器中,可以利用deleted和inserted表来跟踪变化。deleted表保存DELETE和UPDATE操作的影响行,而inserted表保存INSERT和UPDATE操作的新行数据。触发器适用于复杂业务逻辑,例如在更新Inventory时确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器基于表的操作,对表进行增删改时添加触发器。以下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表有数据(旧数据)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值