表A
ID   Name
1     a
2     b
3     c表B
ID ChangeID在A中写触发器,当Name值改变的时候,把表A中对应的ID值存入表B的ChangeID字段
(最基本的触发器操作)问题:
如果在批量更新的时候该怎么处理?
1、如果不使用游标能否做到?
2、如果使用游标,最简单的写法是什么?谢谢大家

解决方案 »

  1.   

    表A
    ID   Name
    1     a
    2     b
    3     c表B
    ID ChangeID
    把表A中对应的ID值存入表B的ChangeID字段?没看明白?
    create trigger mytrigger for INSERT, UPDATE ont A
    as
      insert into b select * from a
      

  2.   

    create trigger trg_update_tableA on tableA
    as update
    if update(Name)
        insert into tableB(ChangeID) select ID from deleted
    GO
      

  3.   

    to :hellowork
    我的触发器也是这样写的问题是,在批量更新tableA中的Name字段时,只能取得最后一条记录,插入到tableB中因为触发器好像是在表更新完成之后才执行的
    而deleted表中只有一条记录(批操作中最后一条执行的记录)因此在批操作的时候我往往只能获取一条
      

  4.   

    沒有必要用游標,直接用觸發器就行了,如hellowork(一两清风) 的
      

  5.   

    而deleted表中只有一条记录(批操作中最后一条执行的记录)
    ------------------------------------------------------批量更新時,deleted表中應該不止一筆記錄才對,你批量更新的語句貼出來看看
      

  6.   

    if object_id('tbTestA') is not null
    drop table tbTestA
    if object_id('tbTestB') is not null
    drop table tbTestB
    GO
    ----创建测试数据
    create table tbTestA(ID int,Name varchar(10))
    create table tbTestB(ChangeID int)
    GO
    ----创建更新触发器
    create trigger trg_update_tbTestA on tbTestA
    for update
    as
    if update(Name)
        insert into tbTestB(ChangeID) select ID from deleted
    GO
    ----插入测试数据
    insert into tbTestA
    select 1,'a' union all
    select 2,'b' union all
    select 3,'c' union all
    select 4,'d' union all
    select 5,'e' ----更新
    update tbTestA set Name = Name + '_xyz' where ID > 3
    GO----查看更新结果
    select * from tbTestA
    ----查看更新触发器生成的结果
    select * from tbTestB----清除测试环境
    drop table tbTestA,tbTestB/*结果
    1.更新结果
    ID          Name       
    ----------- ---------- 
    1           a
    2           b
    3           c
    4           d_xyz
    5           e_xyz2.更新触发器结果
    ChangeID    
    ----------- 
    4
    5
    */
      

  7.   

    谢谢hellowork 我的触发器就是这样写的可是,总是偶尔的出一些问题
    就是有一些符合条件的ID没有捕捉到,例如您的例子中提到的ID=5的记录(只是偶尔),所以我才怀疑是不是因为批量更新,所以触发器会出问题我在网上找了一些相关资料,好像也有人说过触发器中批量更新的问题