在SQL Server 2008中,设有教师表(教师号, 姓名, 所在部门号, 职称)和部门表(部门号, 部门名, 高级职称人数)。请编写满足下列要求的后触发型触发器(设触发器名字为tri_zc)。 每当在教师表中插入一名具有高级职称("教授"或"副教授"

admin2015-07-24  26

问题 在SQL Server 2008中,设有教师表(教师号, 姓名, 所在部门号, 职称)和部门表(部门号, 部门名, 高级职称人数)。请编写满足下列要求的后触发型触发器(设触发器名字为tri_zc)。
每当在教师表中插入一名具有高级职称("教授"或"副教授")的教师时,或者将非高级职称教师的职称更改为高级职称时,均修改部门表中相应部门的高级职称人数。(假设一次操作只插入或更改一名教师的职称)

选项

答案CREATE TRIGGER tri_zc ON教师表 AFTER INSERT,UPDATE AS BEGIN DECLATE@ZC varchar(10),@dept varchar(30) SELECT@dept=所在部门号,@2c=职称FROM inserted IF@ZC=‘教授’or‘副教授’ Update部门表 SET高级职称人数=高级职称人数+1 Where部门号=@dept End

解析 创建触发器的SQL语句为:CREATE TRIGGER,其语法格式为:
CREATE TRIGGER 触发器名称
ON {表名|视图名}
{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [DELETE] [,] [UPDATE]}
AS
[ { IF UPDATE(column)
[{AND | OR } UPDATE(column)…]
SQL 语句
其中AFTER指定触发器为后触发型触发器,INSERT,UPDATE和DELETE为指定引发触发器执行的操作。根据原题要求,insert触发器会在inserted表中添加一条刚插入的记录,update触发器会在更新数据后将更新前的数据保存在deleted表中,更新后的数据保存在inserted表中。在教师表中插入或者更新的时候,都会在inserted表中增加一条记录,所以只需在触发器查询inserted表中查询有没有"教授"或者"副教授"的记录,如果有,则触发修改相应部门的高级职称人数即可。
转载请注明原文地址:https://jikaoti.com/ti/0r37FFFM
0

最新回复(0)