update 语句单独运行可以正常修改吗?
你试验一下,
如果不行,你就知道问题在哪里了!

解决方案 »

  1.   

    你是要用修改后的libai_id来更新libai_book表的libai_classid字段吧?当然条件是修改前的libai_id和libai_book的libai_classid字段相同。
    你写的触发器逻辑有问题,仔细看看就知道了。
    如下写法,应该可以:
    create trigger update4 on libai_class
    for update
    as
    begin
    declare @old_libai_id  类型(长度),
            @new_libai_id  类型(长度)
    if not update(libai_id) return
    select @old_libai_id=libai_id from deleted
    select @new_libai_id=libai_id from insertedupdate libai_book set libai_classid=@new_libai_id
    where libai_classid=@old_libai_idif @@error <>0
    begin
     rollback
     raiserror 99999 '更新失败' 
     return
    endend
      

  2.   

    没有错啊,我用的是update libai_class  set libai_id=2 where id=102libai_id变为2,但是libai_book.libai_classid跟原来相同的都没有什么变化??????
      

  3.   

    你写的触发器的逻辑问题就在这里
    当修改表a的字段1时,触发修改表b的字段2,条件是表a的字段1和表b的字段2相同。
    既然条件是它们两个相等的时候修改,那么还有修改的必要吗?已经相等了,就不必要再改了。所以,实际上它已经修改了,所以体现不出来。
    当然这和你的本意相背了。因为它是拿你修改后的class_id的值来进行比较,修改的。如果出错的时候,最好不要图省事,最好写的条理清晰一点。代码多一点不是坏事。
    人的工作简单了,意味着计算机的工作复杂了。
      

  4.   

    update a.libai_book 
    set a.libai_classid=b.libai_id 
    from libai_book a join libai_class b 
        on a.libai_classid=b.libai_id  lovvver(春晖) 说的很对!!
      

  5.   

    不知道我理解的对不对.
    你有两张表,一张是产品的类别,一张是产品的所属,
    你的trigger的目的是当修改产品的类别的时候,产品所属要随着修改是不是.
      

  6.   

    触发器可以包含任意数量和种类的 Transact-SQL 语句。触发器旨在根据数据修改语句检查或更改数据;它不应将数据返回给用户。触发器中的 Transact-SQL 语句常常包含控制流语言。CREATE TRIGGER 语句中使用几个特殊的表: deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索 deleted 表中的所有值,请使用: 
    SELECT *
    FROM deleted
      

  7.   

    lovvver(春晖)  与你的不同的地方就是用的上面所说的特殊表,
    你要进行这类修改也要这么用
      

  8.   

    答:
    举个例子,比如表a的字段1和表b的字段2是相关联的,也就是说当表a的字段1修改时,表b的字段2也要相应修改。
    现在,表a.字段1:abc->bbc
    你希望表b的字段2中有abc的也要相应改成bbc。不是吗?
    但是数据库在按照你写的语句进行操作的时候,是执行以下语句:
    update 表b set 字段2=bbc
    where 字段2=bbc
    而不是:
    update 表b set 字段2=bbc
    where 字段2=abc
      

  9.   

    在触发器里,你修改的是class_id字段,那么该字段有两个值,一个是修改前的值,放在deleted临时表里,一个是修改后的值,放在inserted临时表里。这两个值要分清。尤其是在修改语句里用到该字段时,更要分清,否则很容易出错的。
      

  10.   

    lovvver(春晖) 说的非常!