好的!
我需要的这样的功能
当某记录的一个特定字段的值发生改变后,该记录另一个特定字段的值也跟着改变。
看着挺简单的,但是我怎么也做不到该记录的那个字段的值改变,老是所有记录那个值都跟着变了!
咋办?
我写的代码是这样的!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
我需要的这样的功能
当某记录的一个特定字段的值发生改变后,该记录另一个特定字段的值也跟着改变。
看着挺简单的,但是我怎么也做不到该记录的那个字段的值改变,老是所有记录那个值都跟着变了!
咋办?
我写的代码是这样的!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
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 触发器。
有个name字段是不会重复的!
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
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可以区别
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
应该利用inserted和deleted两个表关联作为修改的条件。