列级触发器 SQL Server

列级触发器就是对表中的某列进行添加或修改时所执行的触发器。
建立列级触发器与建立触发器的语法是相同的,只是在创建时使用IF UPDATE(column)参数。
语法:
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
参数说明:
IF UPDATE (column):测试在指定列上进行的INSERT或UPDATE操作,不能用于DELETE操作,可以指定多列。因为在ON子句中指定了表名,所以在 IF UPDATE子句中的列名前不要包含表名。若要测试在多个列上进行的INSERT或UPDATE操作,可在第一个操作后指定单独的 UPDATE(column)子句。在INSERT操作中IF UPDATE将返回TRUE值,因为这些列插入了显式值或隐性(NULL)值。
本示例在“MR_SQL”数据库的“MR_Stu_XX”表中创立一个列级触发器,当添加或修改“MR_Stu_XX”表中的“学生姓名”字段时,将在创建的“MR_Stu_JL”表中加以记录。
使用Transact-SQL建立列级触发器
操作步骤如下:
(1)打开SQL查询分析器。
(2)SQL语句如下:
在MR_SQL数据库中创建数据表MR_Stu_JL,用于记录修改MR_Stu_XX表时的时间、用户名等。
USE MR_SQL
GO
CREATE TABLE MR_Stu_JL
(
Data datetime,
MR_id char(4),
state varchar(16),
MR_name varchar(30)
)
GO
在“MR_Stu_XX”表中创建列级触发器“TRI_Stu_JL”,对“MR_Stu_XX”表的“学生编号”进行添加、修改时执行“TRI_Stu_JL”触发器。
CREATE TRIGGER TRI_Stu_JL ON dbo.MR_Stu_XX
FOR INSERT,UPDATE
AS
DECLARE @id char(4)
Select @id=学生编号 from Inserted
if UPDATE(学生姓名)
INSERT MR_Stu_JL VALUES(Getdate(),@id,'修改学生姓名',user_name())
GO

原文地址:https://www.cnblogs.com/johnchain/p/2798128.html