update触发器用于限制用户发出的update语句,用户的修改规则必须在规定之内
update触发器合并了insert触发器和delete触发器的作用
因为更新分为两个操作,删除原数据行,插入新数据行。
删除的数据保存在deleted表中 插入的数据保存在inserted表中
下面这段代码建立了一个update触发器
在用户违规操作时候,同样为了更好的说明update触发器,我没有用事务回滚来取消操作
请看代码
IF EXISTS(Select Name From Sysobjects Where Name='Tri_UPD_Dept' And Type='TR')
DROP TRIGGER Tri_UPD_Dept
go
CREATE TRIGGER Tri_UPD_Dept
ON DEPT
FOR UPDATE
AS
--声明变量
Declare @sDEPTNAME1 VARCHAR(30),@SDEPTNAME2 VARCHAR(30)
--从inserted表提出已插入数据的DEPTNAME值
Select @sDEPTNAME1=DEPTNAME From Inserted
--如更新好后,DEPTNAME,不在我们制定的范围内,撤销操作!
IF @sDEPTNAME1 not In ('网络部门','行政部门','人事部门','生产部门','市场部门')
Begin
Select @sDEPTNAME2=DeptName from deleted
update dept set deptName=@sDEPTNAME2 Where DeptName=@sDEPTNAME1
Print 'The Row Is deny To updated'
End
运行后显示命令执行成功
同样我的表中只有三个字段
DEPTNAME DEPTORDER DEPTID
市场部 1 1
商务部 2 18
人事部 3 19
执行
update dept set deptName='网络财务部门' where deptname='市场部'
抛出错误
(所影响的行数为 1 行)
The Row Is deny To updated
(所影响的行数为 1 行)
执行
update dept set deptName='人事部门' where deptname='市场部'
注:市场存在原表中
|