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

admin2018-05-02  14

问题 在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 En

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

最新回复(0)