用sql serve语句为Teachers创建一触发器,并给出正反实例的SQL语句:当职称从“讲师”晋升为“副教授”时,岗位津贴(TComm)自动增加500元;从“副教授”晋升为“教授”时,岗位津贴自动增加900元;不允许越级晋升,也不能降级。
时间: 2023-11-13 15:04:21 浏览: 127
可以使用如下SQL语句为Teachers表创建一个触发器:
```
CREATE TRIGGER tr_Teachers
ON Teachers
AFTER UPDATE
AS
BEGIN
IF UPDATE(TTitle)
BEGIN
IF EXISTS(SELECT 1 FROM inserted i JOIN deleted d ON i.TId = d.TId WHERE i.TTitle < d.TTitle)
BEGIN
RAISERROR('不能降级!', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
IF EXISTS(SELECT 1 FROM inserted i JOIN deleted d ON i.TId = d.TId WHERE (i.TTitle = '副教授' AND d.TTitle = '讲师') AND i.TComm = d.TComm + 500)
BEGIN
PRINT '从讲师晋升为副教授,岗位津贴自动增加500元'
END
IF EXISTS(SELECT 1 FROM inserted i JOIN deleted d ON i.TId = d.TId WHERE (i.TTitle = '教授' AND d.TTitle = '副教授') AND i.TComm = d.TComm + 900)
BEGIN
PRINT '从副教授晋升为教授,岗位津贴自动增加900元'
END
END
END
```
这个触发器在Teachers表的职称(TTitle)字段发生变化时触发,首先检查是否有降级的情况,如果有,则抛出错误并回滚事务;然后检查是否有晋升到副教授或教授的情况,如果有,则打印相应的提示信息。在实际使用中,你需要根据自己的具体情况进行修改。
正实例的SQL语句:
```
UPDATE Teachers SET TTitle = '副教授', TComm = TComm + 500 WHERE TId = 1
```
反实例的SQL语句:
```
UPDATE Teachers SET TTitle = '副教授', TComm = TComm - 500 WHERE TId = 1
```
阅读全文