SQL–触发器中的 inserted,deleted 表
1.在触发器中有两个临时表,一个叫 inserted ,一个叫deleted
2.当执行insert操作时,在inserted中存储着当前插入的记录,
3.在执行delete操作时,在deleted中存储着当前删除的记录,
4.当执行update时,在inserted中存储着修改后的记录,在deleted中存储着修改前的记录。
5.没有updated这个临时表
6.触发器结束后, inserted,deleted 表会被自动删除
------实现目标:当改名字时,把原来的名存在OldName里
CREATE TRIGGER Trigger_Name ON dbo.t_TEST FOR UPDATE
----创建了一个触发器,名字叫Trigger_Name,在 dbo.t_TEST 表上;执行update 操作时触发
AS
BEGIN
--SELECT * FROM Inserted 只有新增和修改时有数据
--SELECT * FROM Deleted 只有修改和删除的时候有数据
IF(UPDATE(TestName))
---------如果 update 的是 这个dbo.t_TEST 表里的 TestName 字段,那么开始执行下面的语句
BEGIN
UPDATE T1
SET T1.OldName=T2.TestName
FROM dbo.t_TEST T1
INNER JOIN Deleted T2 ON T1.ID=T2.ID
WHERE T1.TestName<>T2.TestName
----更新 t1 表,把 t2 表的 TestName字段上存的值, 放在 t1 表的 NewName 字段上
----更新的数据范围是 t1、t2的 TestName 不一样了
END
END
------结束
GO
-注解: 为什么要用 deleted 表呢 ,
因为我们 只需要把原来的 TestName 记住即可,而deleted表是专门存旧值的 ,所以我们用了 deleted 表