在一表的UPDATE触发器里,有INSERTED表及DELETED表,数据如下:
INSERTED  DELETED
code      code
001       A001
002       C002
003       B003
我想当这表更新了数据后,也触发另一表TABLE1里的字段CODE的值为INSERTED表的值。
TABLE1
code
A001
B003
A001
C002
B003
变为:
更新后的TABLE1表
code
001
003
001
002
003
请问这语句如何写?多谢!

解决方案 »

  1.   

    update TABLE1 set code=right(code,3)
      

  2.   

    update table1 set table1.code =inserted.code from  table1,inserted left join deleted on table1.code=deleted .code 
      

  3.   

    注,INSERTED及DELETED行数相同,两表的不能用排序或索引来做的。
      

  4.   

    语法错误,提示:
    错误107:table1前缀与查询中的所有表我或别名不匹配!
      

  5.   

    数据也可能是这样!!
    INSERTED DELETED
    code code
    01A A001
    DDD C002
    324 B003
      

  6.   

    update table1 set code =inserted.code from inserted left join deleted on code=deleted .code
      

  7.   

    update
     table1 
    set
     code =right(code,3)
    from
     inserted i 
    left join deleted d on 
     code=d .code
      

  8.   

    7楼的语句还是出错!
    因INSERTED是内存中更新后的CODE,这个跟DELETED表中的CODE都没有相应的关系,只有行数相等及对应。
    8楼的跟1楼的都是搞错了我的原意。
      

  9.   

    inserted 和 deleted 没直接联系的话 先创建关联再更新SELECT *,id=IDENTITY(INT,1,1) INTO #1 FROM #inserted
    SELECT *,id=IDENTITY(INT,1,1) INTO #2 FROM #deletedUPDATE #tab SET code =i.code1 FROM #1 i,#2 d WHERE d.code2=#tab.code AND i.id=d.id
      

  10.   

    所有更新都可以按照这个思想实现.
    比如综合 表B 表C 的内容来更新表A
    那么可以分两个步骤step 1
     Select Key, Value From 表B, 表C Where ....
     其中 Key 为 表A 中需要更新的内容的关键字段.(如果表A中逐渐包含两个字段则变化成
     Select KeyA, KeyB, Value From 表B, 表C Where ....)step 2
    将上面的查询结果更新到表A
    Update A
      Set A.Value = Result.Value
    From 
     表A as A,
     (Select ....) AS Result
    Where A.Key = B.Key