问答题
在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|AFFER|INSTEAD OF}
{[INSERT][,][DELETE][,][UPDATE]}
AS{sql_statement}
[;]
其中AFFER指定触发器为后触发型触发器,INSERT,UPDATE和DELETE为指定引发触发器执行的操作。根据原题要求,Insert触发器会在inserted表中添加一条刚插入的记录,Update触发器会在更新数据后将更新前的数据保存在deleted表中,更新后的数据保存在inserted表中。在教师表中插入或者更新的时候,都会在inserted表中增加一条记录,所以只需在触发器查询inserted表中查询有没有“教授”或者“副教授”的记录,如果有,则触发修改相应部门的高级职称人数即可。