2023年8月3日发(作者:)
数据库应用技术—SQL Server 2008篇(第3版)
9.2.2 UPDATE触发器
对于UPDATE触发器,当UPDATE操作在表上执行时,则产生触发。在触发器程序中,有时只关心某些列的变化,则可以使用IF UPDATE(列名),仅对指定列的修改作出反应,这点是其他两种触发器没有的。
例9-4 在“客户信息”表上,建立一个UPDATE后触发器,当用户修改客户的“编号”列时,给出提示信息,并不能修改该列。
在查询设计器中运行如下的测试语句。
CREATE TRIGGER Check_CstNo ON 客户信息
AFTER UPDATE – –后触发器
AS
IF UPDATE(编号) – –针对该列的处理
BEGIN
RAISERROR('客户编号不能进行修改!',7,2) – –显示信息
ROLLBACK TRANSACTION
END
GO
– –测试该修改触发器
UPDATE 客户信息 SET 编号=8 WHERE 编号=7
GO
UPDATE 客户信息 SET 电话='80256716' WHERE 编号=6 – –修改电话成功
GO
– –修改编号失败
测试结果如图9-4所示。
图9-4 UPDATE后触发器的测试结果
在例9-1和例9-4中都用到了事务回滚语句(在9.5节将详细说明),需要指出的是,在触发188
2023年8月3日发(作者:)
数据库应用技术—SQL Server 2008篇(第3版)
9.2.2 UPDATE触发器
对于UPDATE触发器,当UPDATE操作在表上执行时,则产生触发。在触发器程序中,有时只关心某些列的变化,则可以使用IF UPDATE(列名),仅对指定列的修改作出反应,这点是其他两种触发器没有的。
例9-4 在“客户信息”表上,建立一个UPDATE后触发器,当用户修改客户的“编号”列时,给出提示信息,并不能修改该列。
在查询设计器中运行如下的测试语句。
CREATE TRIGGER Check_CstNo ON 客户信息
AFTER UPDATE – –后触发器
AS
IF UPDATE(编号) – –针对该列的处理
BEGIN
RAISERROR('客户编号不能进行修改!',7,2) – –显示信息
ROLLBACK TRANSACTION
END
GO
– –测试该修改触发器
UPDATE 客户信息 SET 编号=8 WHERE 编号=7
GO
UPDATE 客户信息 SET 电话='80256716' WHERE 编号=6 – –修改电话成功
GO
– –修改编号失败
测试结果如图9-4所示。
图9-4 UPDATE后触发器的测试结果
在例9-1和例9-4中都用到了事务回滚语句(在9.5节将详细说明),需要指出的是,在触发188
发布评论