zoukankan      html  css  js  c++  java
  • 在一个触发器里面如何判断触发器的增删改操作

         当一个触发器里面同时存在insert,update,delete时,如何按照不同的操作而触发不同的触发器呢?
      但是在效率上没有分开写三个触发器好 ,看不同的需求吧!

       如有A、B两表。B表中记录取自A表
    A:
    ID(PK),     Name,     Sex,     Job,     Address
    B:
    ID(PK),     Name,     Address
    代码如下:


    create   trigger   tr_insert_update_delete_A   on   A
    for   insert,update,delete
    as
    if   not   exists(select   *   from   deleted)   --如果是新增
    insert   B(Name,Address)   select   Name,Address   from   inserted

    else   if   not   exists(select   *   from   inserted)   --如果是删除
    delete   B   from   deleted   d   where   B.Name=d.Name


    else  if(select count(*) from deleted)>0 and (select count(*) from inserted)>0     --如果是更新
    update   B   set   Name=i.Name,Address=i.Address
    from   B,inserted   i,deleted   d
    where   i.Name=d.Name   and   i.Name=b.Name


     注意在逻辑虚拟表deleted和inserted在执行批量操作时是多个记录同时存在而不是一条条的循环执行!
     自定义错误消息: raiserror( '不允许同时更新多条记录的主键值,更新被取消! ',1,16)

    示例使用 isnumeric 返回所有非数值的数据行。
     select * from CDS_Guest
    where isnumeric(name)=0;
    go
    示例使用 isdate 测试某一字符串是否是有效的 datetime。

    if isdate('2009-05-12 10:19:41.177')=0
        print '有效的日期'
    else
        print '无效的日期'


     

  • 相关阅读:
    client-go和golang源码中的技巧
    使用Prometheus监控snmp
    kubernetes client-go解析
    go 语言的一个赋值操作
    使用Prometheus监控bind9的DNS服务
    验证Prometheus alertmanager邮件发送
    JS 监听浏览器各个标签间的切换
    通过案例理解position:relative和position:absolute
    浏览器的统一指针事件:Pointer Event
    Chrome浏览器读写系统剪切板
  • 原文地址:https://www.cnblogs.com/mistor/p/2243640.html
Copyright © 2011-2022 走看看