好的!
我需要的这样的功能
当某记录的一个特定字段的值发生改变后,该记录另一个特定字段的值也跟着改变。
看着挺简单的,但是我怎么也做不到该记录的那个字段的值改变,老是所有记录那个值都跟着变了!
咋办?
我写的代码是这样的!create trigger trU_aa
on a
after update
as
if update(z4)
begin
    update a set z1=0  where z1=1
    update a set z1=6  where z1=5
endgo

解决方案 »

  1.   

    你现在写的Trigger,如果改变任意一行的z4,你的所有z1等于1的都会变为0,所有z1等于5的都会变为6。
      

  2.   

    create trigger trU_aa on a
    for update
    as
    if update(z4)
    begin
        update a set z1=0  where z1=1
        update a set z1=6  where z1=5
    endgo
    /*SQL SERVER 联机帮助*/
    AFTER指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 FOR 关键字,则 AFTER 是默认设置。不能在视图上定义 AFTER 触发器。
      

  3.   

    一般要会运用触发器在触发时所产生的两个临时表 inserted、deleted/------------------------------联机帮助/
      

  4.   

    表A没有关键字
    有个name字段是不会重复的!
      

  5.   

    create trigger trU_aa
    on a
    after update
    as
    declare @z1 varchar(10)
    if update(z4)begin
        select @zl=zl from deleted
        update a set z1=0  where z1=@zl
    --    update a set z1=6  where z1=@zl
    end
    这样可以跟踪对a表的z4是否进行了修改,
    如果修改则对a表的同一条记录的z1进行修改go
      

  6.   

    表的结构是这样的
       z1   z2  z4
        0   n1  5
       16   n7  8
        1   n9  3
       32   n3  4
       16   n6  7
       ...  ... ...某条记录的z4发生改变后,该记录的z1也跟着变。
    只有当z1=0\16\32时,才会z1=z1+1,其他情况不会发生变化
    各记录只有z2可以区别
      

  7.   

    帮你改了下,试一下。CREATE TRIGGER [trU_aa] ON [dbo].[a] 
    FOR  UPDATE
    AS
    begin
    Declare @Name Varchar(50)
    if update(z4)
    Begin
    Select @Name =Name from Inserted 
    update a set z1=z1+1  where z1 In (0,16,32) And Name=@Name
    End
    end
      

  8.   

    没有关键字可不行的
    应该利用inserted和deleted两个表关联作为修改的条件。