1
数据库原理与应用技术
1.10.4.4 9.4.4 修改触发器
9.4.4 修改触发器

1. 用SQL Server Management Studio修改触发器

在SQL Server Management Studio中,展开指定的表,右击要修改的触发器,从弹出的快捷菜单中选择“修改”选项,则会出现触发器修改窗口,如图9-56所示。在文本框中修改触发器的SQL语句,单击“语法检查”按钮,可以检查语法是否正确,单击“执行”按钮,可以成功修改此触发器。

图9-56 修改触发器

2. 使用SQL语句修改触发器

修改触发器与创建触发器类似,只是把CREATE改为ALTER即可。可以通过ALTER TRIGGER语句来修改触发器中的代码,其语法格式如下:

ALTER TRIGGER trigger_name

ON ( table | view )

[ WITH ENCRYPTION ]

{

{ ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }

[ NOT FOR REPLICATION ]

AS

sql_statement [ …n ]

}

|

{ ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ , ] [ UPDATE ] }

[ 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 ]

}

}

例如,将例9-33创建的替代触发器改为普通的AFTER触发器,要求在修改或插入学生表的数据时检查插入或修改记录的性别是否只是男或女。若不是,则给出错误信息并回滚。

程序如下:

ALTER TRIGGER [dbo].[sex_control]

ON student

FOR INSERT,UPDATE

AS

DECLARE

@sno char(10), @sname char(10), @ssex char(2),

@sage numeric(9,0), @sdept char(10), @sbplace char(10)

-- inserted为临时表,查询被修改记录的性别

SELECT @sno=sno,@sname=sname,@ssex=sex,

@sage=age, @sdept=department,@sbplace=bplace

FROM inserted

IF NOT((rtrim(@ssex)='男') OR (rtrim(@ssex)='女'))

BEGIN

RAISERROR('性别只能是男或者女!不能是%s',16,1,@ssex)

ROLLBACK --撤销所做的更改

END

修改触发器成功后,新建查询,输入一条修改学生表的95008号学生信息的代码:

UPDATE student SET sex='南' WHERE sno='95008 '

提示修改不成功,执行结果如图9-57所示。

图9-57 创建AFTER触发器