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

admin2017-06-27  47

问题 在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[schema_name.]trigger_name
    ON{table|view}
    {FOR|AFTER|INSTEAD OF}
    {[INSERT][,][DELETE][,][UPDATE]}
    AS{sql_statement}
    [ ;]
    其中AFTER指定触发器为后触发型触发器,INSERT,UPDATE和DELETE为指定引发触发器执行的操作。根据原题要求,Insert触发器会在inserted表中添加一条刚插入的记录,Up—date触发器会在更新数据后将更新前的数据保存在deleted表中,更新后的数据保存在inserted表中。在教师表中插入或者更新的时候,都会在inserted表中增加一条记录,所以只需在触发器查询inserted表中查询有没有“教授”或者“副教授”的记录,如果有,则触发修改相应部门的高级职称人数即可。
转载请注明原文地址:https://kaotiyun.com/show/B1lZ777K
0

最新回复(0)