create trigger Sno_age111 on Students for insert,update as declare @newSbrith as smalldatetime select @newSbrith=Sbirth from deleted select @newSbrith=Sbirth from inserted if DATEDIFF(yy, @newSbrith, GETDATE()) <14 or DATEDIFF(yy, @newSbrith, GETDATE()) >40 BEGIN PRINT '学生的入学年龄不在14~40岁之间' ROLLBACK TRANSACTION END INSERT INTO Students(Sno,Sname,Sgender,Sbirth,Dno,Sclass,Mno,Snative ) VALUES(13,'唐艺昕','女','2000-10-10',NULL,NULL,NULL,null);为什么插入不超过
时间: 2024-03-01 12:53:58 浏览: 40
根据您提供的 SQL 语句,其中的 `INSERT` 语句是不会触发触发器的。这是因为 `INSERT` 语句中插入的数据已经满足了触发器中的条件,即插入的学生年龄在 14 到 40 岁之间。因此,该 `INSERT` 语句可以正常执行,触发器不会被触发。
如果您想测试触发器的功能,可以尝试插入或更新一条学生记录,使得学生的年龄不符合要求,例如:
```
INSERT INTO Students (Sno, Sname, Sgender, Sbirth, Dno, Sclass, Mno, Snative)
VALUES (14, '张三', '男', '2010-01-01', NULL, NULL, NULL, NULL);
```
执行该插入操作时,触发器会被触发,抛出一个错误信息,提示学生的入学年龄不在 14~40 岁之间,同时该操作也会被回滚,不会对数据库产生影响。
相关问题
create trigger tr_insert on takes for insert as declare @sno varchar(5) declare @cno varchar(5) declare @credit numeric(3,0) select @sno=ID,@cno=course_id from inserted select @credit=credits from course where course_id=@cno update student set tot_cred=tot_cred+@credit where ID=@sno go
这是一个 SQL Server 数据库中的触发器,用于在 takes 表中插入数据时,更新 student 表中的 tot_cred 字段。具体来说,当在 takes 表中插入一条数据时,触发器会从 inserted 表中获取学生的 ID 和课程的 course_id,并从 course 表中获取该课程的学分 credits。然后,触发器会根据学生的 ID 和课程的学分更新 student 表中的 tot_cred 字段,以反映该学生现在已获得的总学分数。当所有更新完成后,触发器会结束执行。
create trigger on_studen on student after update as begin if object_id(N'student_',N'U') is null create table student_(sno varchar(15),name varchar(15)); declare @pre_sno varchar(15) declare @pre_name varchar(15) select @pre_sno = sno from deleted select @pre_name =name from deleted insert into student_(sno,name) values(@pre_sno,@pre_name) end帮我分析这个触发器
这个触发器是在SQL Server数据库中创建的,它是一个在student表上的after update触发器。当在student表中进行更新操作时,该触发器会被激活,执行以下操作:
首先,它会检查名为student_的表是否存在,如果不存在,则创建一个新的student_表,其中包含sno和name两列。
然后,它会从被更新的行中获取sno和name的值,并将它们存储在@pre_sno和@pre_name变量中。
最后,它会将@pre_sno和@pre_name的值插入到student_表中。
该触发器的目的是在每次更新student表时,将更新前的sno和name的值保存到student_表中,以便进行历史记录或审计。需要注意的是,这个触发器只适用于单个更新操作,如果同时更新多行,它只会记录其中一行的更新前值。
阅读全文