首页 新闻 会员 周边

几个表的复杂关系,用触发器来实现,请各位楼主多多指导

0
悬赏园豆:20 [已解决问题] 解决于 2009-10-02 07:56

我有三张关联的表,其中一个是承运单的表,里面

主要有委托日期、接收日期、驾驶员ID、车辆ID、承运单状态;另一个是驾驶员

表,里面主要有:驾驶证号、驾驶状态; 还有一张是车辆表,里面主要有:车

辆的状态;其中我把驾驶员的状态用0来表示空闲状态,1表示运货状态 还有承

运单的状态用0来表示未签收,1表示已签收。现在问题是:
我想在承运单添加信息时,且承运单状态为未签收的情况下,添加时,想把驾驶

员的状态由空闲变为运货,并且驾驶员要是处于运货状态,则不能删除。
还有一个问题是如果我承运单的状态变为已签收的同时,我的驾驶员要变成空闲

状态,想用触发器来做,但不知怎么做,请楼主多多指教。非常感谢!

问题补充: 具体代码怎么写
超越极限的主页 超越极限 | 初学一级 | 园豆:0
提问于:2009-09-28 08:40
< >
分享
最佳答案
0

也就是说你要在承运单表表上添加触发器,触发器有4中操作,增、删、改、查。

你主要做的是增删改的触发,只要你区分三种操作后,在相应的操作的后面添加相应的逻辑sql就可以了啊。

想在承运单添加信息时〔承运单肯定为未签收〕:新增承运单信息、更新司机状态信息。

承运单签收时候:更新承运单信息、、更新司机状态信息。

收获园豆:10
邢少 | 专家六级 |园豆:10926 | 2009-09-28 10:11
其他回答(1)
0

--第一点是添加承运单,用的是insert,这时单据状态是0,同时把驾驶员的状态改为1.第二点是更新承运单的状

--态,是update,这时状态被改为1,同时把驾驶员的状态改为0.

CREATE TRIGGER c_inup

on chengyundan --承运单表名

for insert,update

AS
 begin

  declare @status varchar(1) --这个是承运单状态

  declare @jiaID varchar(20) --这个是承运单里的驾驶员id

  select @status = c_status,@jiaID = j_id from inserted

  if(isnull(@status,'')='0')

    begin

      update jiashiyuan set j_status = '1' where j_id=@jiaID

    end

  else if(isnull(@status,'')='1')

    begin

      update jiashiyuan set j_status = '0' where j_id=@jiaID

    end

end

剩下的不能删除功能,可以做在表示层或是逻辑层,如果驾驶员表的状态为1,就return,不让他执行。

收获园豆:10
IS黑山老妖 | 园豆:550 (小虾三级) | 2009-09-28 17:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册