zoukankan      html  css  js  c++  java
  • 数据库触发器for,instead of和after的使用

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

    创建的触发器如下:

     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 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语句没有执行,在此告知。

  • 相关阅读:
    mongodb搭建
    使用systemctl管理服务
    常用命令--find
    linux中的常用信号
    bash 中的特殊变量
    tomcat开启PID文件
    django基础入门
    Redis源码编译安装
    DRF路由组件
    Django/DRF序列化
  • 原文地址:https://www.cnblogs.com/toohoo/p/7892330.html
Copyright © 2011-2022 走看看