create trigger kk on test
For update,insert
AS
begin
    update a set flag=(case when isnull(b.memo,'')='' then '1' else '2' end)
    from test a join inserted b on a.tid=b.tid
end
--连insert的也省了

解决方案 »

  1.   

    刚试了一下这样
    create trigger kk on test
    For update,insert
    AS
    if update(memo)
    begin
        update a set flag=(case when isnull(b.memo,'')='' then '1' else '2' end)
        from test a join inserted b on a.tid=b.tid
    end
    还是不行啊
    会不会和触发同一表有关系呢?
      

  2.   

    报告什么错误??create trigger kk on test
    For update
    AS
    update a set flag=case when i.memo is null or i.memo='' then '1' else '2' end
    from test a,inserted i where a.tID=i.tID
      

  3.   

    to  zlp321002(风中有只可爱的熊)
    我是用程序更新表test,然后去到那一步就运行不下去了
    按你的写法会否出现循环触发呢?
      

  4.   

    create table test(tID varchar(30),memo varchar(100),flag varchar(10))
    insert into test 
    select 'a001','aaa',32
    union all
    select 'a002','aab',22
    union all
    select 'a003','aac',4
    union all
    select 'a001','aac',4
    create trigger kk on test
    For update,insert
    AS
    if update(memo)
    begin
        update a set flag=(case when isnull(b.memo,'')='' then '1' else '2' end)
        from test a join inserted b on a.tid=b.tid
    end
    --单个触发情况
    update a
    set memo='ttt'
    from test a
    where tID='a002'
    --多个触发情况
    update a
    set memo='ttt'
    from test a
    where tID='a001'
    drop table test--没有问题啊.
      

  5.   

    我用查询分析器来更新表test,是可以通过,但是在程序里面更新表test的memo字段就出错了。
    把触发器改成这样
    create trigger kk on test
    For update,insert
    AS
    if update(memo)
    begin
        update test set flag='2' 
    end
    就可以通过,比较郁闷