请问我更新一表A中的数据,要触发更新B 表中的数据(包括插入、更新、删除)
       更新一表C中的数据,要触发更新B 表中的数据(包括插入、更新、删除)
还有D 表等等
A表
rkdh mc gg zs sl 分别是入库单号 名称 规格 支数 重量
1001 aa 5 5 40如果 C 表中插入记录的话
rkdh mc gg zs sl 分别是入库单号 名称 规格 支数 重量
3001 aa  6  6  66
另一个表B
部分字段
pzh zs sl  lx
1001 5 40   A
3001 6  66  C
要求更新表A的支数或者数量时 表B 触发更新 (同样插入、删除有效)
create trigger UpdateA on A表 for insert,update,delete --创建一个insert、update和delete都会触发的触发器
as
begin
  if exists(select 1 from inserted) --判断inserted表中是否有数据,如果有..就是发生了insert或update
  begin
  if not exists(select 1 from deleted) --如果inserted里有数据,但deleted里没有数据,则是insert
  insert 表B select rkdh,zs,sl from inserted ----这里这么加一个固定值 如果是表A则插入的 LX字段值为A 
 else --如果inserted和deleted中都有数据,则是update
  update 表B set zs=i.zs,sl=i.sl from inserted as i where 表B.pzh=i.rkdh
  end
  else --如果inserted里什么也没有,但触发了,则是发生了delete
  delete 表B from deleted as d where 表B.pzh=d.rkdh
end上述红色的部分该如何解决呢?
create trigger UpdateA on A表 for insert,update,delete  
as
begin
   if exists(select 1 from inserted)  
   begin
      if not exists(select 1 from deleted)   
        insert 表B select rkdh,zs,sl,'A' from inserted
      else    
        update 表B set zs=i.zs,sl=i.sl from inserted as i where 表B.pzh=i.rkdh and lx='A'
   end
   else   
     delete 表B from deleted as d where 表B.pzh=d.rkdh and lx='A'
end这个执行时 检验语法时 报错  查询中列名或表名 不匹配请高手指教是 注明解释!!!谢谢!

解决方案 »

  1.   

    如果是按楼主的意思,那么表B要加一个字段表示是哪个表插入的,字段比如为lx表B(楼主现有字段,lx)A表触发器上的插入语句:insert 表B select rkdh,zs,sl,'A' as lx from inserted  这样子,其他表的触发器类似。
      

  2.   

    insert 表B(pzh,zs,sl,lx) select rkdh,zs,sl,'A' as lx from inserted 
    是的  表B 中的 LX  表示是哪个表 触发的
      

  3.   

    insert 表B(pzh,zs,sl,lx) select rkdh,zs,sl,'A' as lx from inserted 
    这个语句能执行吗??
      

  4.   

    表B中的lx这一列是不是字符类型的啊?
      

  5.   

    insert 表B(pzh,yrkdh,zs,sl,lx) select rkdh,rkdh,zs,sl,'A' as lx from inserted  
    pzh  yrkdh   lx 均为字符型
    zs sl 为整型
    执行此命令时     错误 107:列前缀 '表B'与查询中所用的表名或别名不匹配。