数据库触发器for,instead of和after的使用
时间:2021-07-01 10:21:17
帮助过:62人阅读
USE [choose_Man]
2 GO
3 /****** Object: Trigger [dbo].[tri_field] Script Date: 11/24/2017 20:49:38 ******/
4 SET ANSI_NULLS
ON
5 GO
6 SET QUOTED_IDENTIFIER
ON
7 GO
8 ALTER trigger [dbo].
[tri_field] on [dbo].
[tb_field]
9 for insert,
update
10 as
11 if(
select COUNT(
*)
from tb_college,inserted
12 where tb_college.collegeid
= inserted.collegeid)
=0
13 begin
14 print ‘未找到该专业的院系信息,请添加相应院系后重试!‘
15 rollback
16 end
17 else IF
18 (
SELECT COUNT(
*)
from tb_field,inserted
19 where tb_field.fieldid
=inserted.fieldid)
>0
20 begin
21 print‘专业号码产生冲突,请核对后重试!‘
22 rollback
23 end
24
插入的数据如下:
1 insert into tb_field(fieldid,collegeid,fieldname,fieldmaster,telephone) values(‘F0022‘,‘C0008‘,‘数学与统计系‘,‘夏宏兴‘,‘3345901‘)
报错:
解决:
首先使用for,代码第九行,我插入的数据时,触发器是在SQL语句执行完成之后才触发的,所以在插入数据之后,触发器再检查时就检查出有相同的fieldid了,所以应该将检查条件设置成大于1,而不是0
(SELECT COUNT(*) from tb_field,inserted
19 where tb_field.fieldid=inserted.fieldid)>1
最后成功插入数据。
用for控制时,它的作用默认是和after一样的,用instead of是,执行SQL语句之前触发触发器,最后显示(1行受影响),但是我查询表数据的时候发现并没有将数据插入表中,应该是SQL语句没有执行,在此告知。
数据库触发器for,instead of和after的使用
标签:数学 nbsp 插入数据 而不是 instead name values 表数 使用