我有2张表,共同的字段是:客房编号。我在删除第2张表的一条信息的时候,希望第一张表的其中的一个数据由“空”变为“满”。要实现这个操作的代码怎么写,我用的是DELPHI,数据库用的是SQL2000!

解决方案 »

  1.   

    下班了 随便copy一个
    触发器设计技巧与实例 触发器设计技巧与实例
      在数据库设计中,有两种方法可设定自动化的资料处理规则,一种是条件约束,
      一种是触发器,一般而言,条件约束比触发器较容易设定及维护,且执行效率较
      好,但条件约束只能对资料进行简单的栏位检核,当涉及到多表操作等复杂操
      作时,就要用到触发器了.
       一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别
      是:
       虚拟表Inserted 虚拟表Deleted
      在表记录新增时 存放新增的记录 不存储记录
       修改时 存放用来更新的新记录 存放更新前的记录
       删除时 不存储记录 存放被删除的记录
       触发器的种类及触发时机
      After触发器:触发时机在资料已变动完成后,它将对变动资料进行必要的
       善后与处理,若发现有错误,则用事务回滚(Rollback Transaction)
       将此次操作所更动的资料全部回复。
      Istead of 触发器:触发时机在资料变动前发生,且资料如何变动取决于触发器
      现在介绍一下创建触发器的编写格式:
      After类型:
       Create Trigger 触发器名称
       on 表名
       after 操作(insert,update)
       as
       Sql语句
      Instead类型
       Create Trigger 触发器名称
       on 表名
       Instead of 操作(update,delete)
       as
       Sql语句
      实例1:
       在订单(表orders)中的订购数量(列名为num)有变动时,触发器会先到客户(表Customer)中
      取得该用户的信用等级(列名为Level),然后再到信用额度(Creit)中取出该等级
      许可的订购数量上下限,最后比较订单中的订购数量是否符合限制。
      代码:
       Create Trigger num_check
       on orders
       after insert,update
       as
       if update(num)
       begin
       if exists(select a.* from orders a join customer b on a.customerid=b.customerid
       join creit c on b.level=c.level
       where a.num between c.up and c.down)
       begin
       rollback transaction
       exec master..xp_sendmail 'administrator','客户的订购数量不符合限制'
       end
       end
      实例2:
       有工资管理系统中,当公司对某员工甲的月薪进行调整时,通常会先在表员工中修改薪资列,然后在
       表员工记录中修改薪资调整时间与薪资
      
       Create trigger compensation
       on 员工
       after update
       as
       if @@rowcount=0 return
       if update(薪资)
       begin
       insert 员工记录
       select 员工遍号,薪资,getdate()
       from inserted
       end
      

  2.   

    if OBJECT_ID('tb') is not null drop table tb
      go
    create table tb(客房编号 nvarchar(100))
      go
    if OBJECT_ID('tc') is not null drop table tc
      go
    create table tc(客房编号 nvarchar(100),状态 nvarchar(100))
      go
    create trigger dbo.trig_tc on dbo.tb
    for delete
    as
       update a set a.状态='满' 
         from tc a,deleted b where a.客房编号=b.客房编号
    goinsert into tc
    select '101','空'
    union all select '102','空'
    insert into tb
    select '101'
    union all select '102'delete tb where 客房编号='101'select * from tc
    /*
    客房编号 状态
    101 满
    102 空
    */
      

  3.   

    关于什么是触发器,LZ到GOOGLE上找!方法楼上已有!
      

  4.   

    乔峰哥哥在吗?QQ里跟你了解几个细节问题,我的QQ是451868099.