假设有学生、宿舍迁入迁出、宿舍三个表
要实现 删除一个学生信息 然后触发删除 宿舍迁入迁出表信息和更新宿舍表信息
下面是我错误的代码:
create trigger delete_info
on 学生
for delete
as 
declare @dno nchar(20);
declare @ano nchar(20);
select @dno=新宿舍号 from 宿舍迁入迁出 where 学生号 =(select 学生号 
from deleted)
select @ano=新楼号 from 宿舍迁入迁出 where 学生号 =(select 学生号 
from deleted)
delete from 宿舍迁入迁出
where 学生号 = (select 学生号 
from deleted)create trigger dorminout_update
on 宿舍迁入迁出
after delete
as
update 宿舍
set 剩余容量=剩余容量+1,
    已用容量=已用容量-1
where 宿舍号=@dno and 楼号=@ano--测试数据:
delete from 学生
where 学生号 = '1001010101';本来第二个触发器是这样的:create trigger dorminout_update
on 宿舍迁入迁出
after delete
as
update 宿舍
set 剩余容量=剩余容量+1,
    已用容量=已用容量-1
from 宿舍t
inner join deleted i
        on t.楼号 = i.新楼号 
           and t.宿舍号 = i.新宿舍号
触发器

解决方案 »

  1.   

    create trigger dorminout_update
    on 宿舍迁入迁出
    after delete
    as
    update t set t.剩余容量=t.剩余容量+1,    
                 t.已用容量=t.已用容量-1
    from 宿舍 t inner join deleted i  on t.楼号 = i.新楼号  
    and t.宿舍号 = i.新宿舍号
      

  2.   

    可以写到一个触发器里面create trigger delete_info
    on 学生
    for delete
    as begin
    declare @dno nvarchar(20),@ano nvarchar(20)
    select @dno=a.新宿舍号,@ano=a.新楼号
      from 宿舍迁入迁出 a join deleted d on a.学生号 =d. 学生号 
    delete a from 宿舍迁入迁出 a
    join deleted d on  a.学生号 =d. 学生号
    update 宿舍
    set 剩余容量=剩余容量+1,
        已用容量=已用容量-1
    where 宿舍号=@dno and 楼号=@ano
    end