我是靠谱客的博主 腼腆银耳汤,这篇文章主要介绍数据库触发器for,instead of和after的使用,现在分享给大家,希望可以做个参考。

  最近搞SQL server2008 R2数据库课程设计,在使用for,instead of和after是遇到一点小阻碍,最终解决:

创建的触发器如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1 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
1 insert into tb_field(fieldid,collegeid,fieldname,fieldmaster,telephone) values('F0022','C0008','数学与统计系','夏宏兴','3345901')

报错:

解决:

首先使用for,代码第九行,我插入的数据时,触发器是在SQL语句执行完成之后才触发的,所以在插入数据之后,触发器再检查时就检查出有相同的fieldid了,所以应该将检查条件设置成大于1,而不是0

复制代码
1
2
(SELECT COUNT(*) from tb_field,inserted 19 where tb_field.fieldid=inserted.fieldid)>1

最后成功插入数据。

用for控制时,它的作用默认是和after一样的,用instead of是,执行SQL语句之前触发触发器,最后显示(1行受影响),但是我查询表数据的时候发现并没有将数据插入表中,应该是SQL语句没有执行,在此告知。

 

转载于:https://www.cnblogs.com/toohoo/p/7892330.html

最后

以上就是腼腆银耳汤最近收集整理的关于数据库触发器for,instead of和after的使用的全部内容,更多相关数据库触发器for,instead内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部