create trigger tri_1 on tab_accept for update,delete
as
 if exists(select * from inserted) 
    begin
      update tab_career set IDcard=inserted.IDcard from tab_career,inserted where 条件(注即表tab_accept和tab_career相关联的条件)
    end
  else
    begin
      delete tab_career where idcard in (select idcard from deleted)
    end

解决方案 »

  1.   

    情况(1):
    当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段
    情况(2):
    当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcardcreate trigger t_test on tab_accept
    for update,delete
    as
    begin
    if update(IDcard)
     update tab_Career set IDcard=a.IDcard from inserted a join tab_Career b on 
    b.IDcard=a.IDcard
    delete from tab_Career where IDcard (select IDcard from deleted)
    end
      

  2.   

    Create Trigger Trg_Name on tab_accept for update,delete
    as
     if  Update(IDcard)
        update tab_career set IDcard=b.IDcard from tab_career a,inserted b 
             where 条件
     delete tab_career where idcard in (select idcard from deleted) 
                                 and (Not exists(select * from inserted))
      

  3.   


    before与after问题在SQLSERVER 中不存在吧?以前写ORACLE时有
      

  4.   

    12.5 触发器概述
    在上面几节我们介绍了一般意义的存储过程即用户自定义的存储过程和系统存储过
    程本节将介绍一种特殊的存储过程即触发器在余下各节中我们将对触发器的概念
    作用以及对其的使用方法作详尽介绍使读者了解如何定义触发器创建和使用各种不同
    复杂程度的触发器
    12.5.1 触发器的概念及作用
    触发器是一种特殊类型的存储过程它不同于我们前面介绍过的存储过程触发器主
    要是通过事件进行触发而被执行的而存储过程可以通过存储过程名字而被直接调用当
    对某一表进行诸如UPDATE INSERT DELETE 这些操作时SQL Server 就会自动执行
    触发器所定义的SQL 语句从而确保对数据的处理必须符合由这些SQL 语句所定义的规

    触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数
    据的一致性除此之外触发器还有其它许多不同的功能
    1 强化约束Enforce restriction
    触发器能够实现比CHECK 语句更为复杂的约束
    2 跟踪变化Auditing changes
    触发器可以侦测数据库内的操作从而不允许数据库中未经许可的指定更新和变化
    3 级联运行Cascaded operation
    触发器可以侦测数据库内的操作并自动地级联影响整个数据库的各项内容例如
    某个表上的触发器中包含有对另外一个表的数据操作如删除更新插入而该操作
    又导致该表上触发器被触发
    4 存储过程的调用Stored procedure invocation
    为了响应数据库更新触发器可以调用一个或多个存储过程甚至可以通过外部过程
    的调用而在DBMS 数据库管理系统本身之外进行操作
    由此可见触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等
    一些方面的问题例如触发器能够找出某一表在数据修改前后状态发生的差异并根据
    这种差异执行一定的处理此外一个表的同一类型INSERT UPDATE DELETE 的
    多个触发器能够对同一种数据操作采取多种不同的处理
    总体而言触发器性能通常比较低当运行触发器时系统处理的大部分时间花费在
    参照其它表的这一处理上因为这些表既不在内存中也不在数据库设备上而删除表和插
    入表总是位于内存中可见触发器所参照的其它表的位置决定了操作要花费的时间长短
    12.5.2 触发器的种类
    SQL Server 2000 支持两种类型的触发器AFTER 触发器和INSTEAD OF 触发器其
    中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器该类型触发器要求只
    有执行某一操作INSERT UPDATE DELETE 之后触发器才被触发且只能在表
    上定义可以为针对表的同一操作定义多个触发器对于AFTER 触发器可以定义哪一
    个触发器被最先触发哪一个被最后触发通常使用系统过程sp_settriggerorder 来完成此
    任务
    INSTEAD OF 触发器表示并不执行其所定义的操作INSERT UPDATE DELETE
    而仅是执行触发器本身既可在表上定义INSTEAD OF 触发器也可以在视图上定义
    INSTEAD OF 触发器但对同一操作只能定义一个INSTEAD OF 触发器
      

  5.   

    情况(1):
    当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段create trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器
    情况(2):
    当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcard
      

  6.   

    按错了键,补充如下:情况(1):
    当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段create trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器
    for insert  --新增记录时触发
    as
    update tab_Career set IDcard=b.IDcard  --根据新增的记录来更新
    from tab_Career a, inserted b where a.id=b.id  --两者之间相关联和主键
      

  7.   

    情况(2):
    当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcardcreate trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器
    for delete  --删除记录时触发
    as
    delete tab_Career where IDcard in (select IDcard  from deleted)  --从deleted表中获得删除的IDcard