关于使用触发器同步更新数据的有关问题
关于使用触发器同步更新数据的问题
我想实现表A的字段A1与库qb表B的字段B1同步他们有相同的关联字段C,即当表A的A1的数据发生变动时那么更新库qb表B里的B1字段
下面是我写的代码
ALTER TRIGGER [dbo].[update_B_toA] ON [dbo].[A]
for Update
AS
declare @C varchar(20)
IF Update (A1)
BEGIN
declare @A decimal
declare tc cursor for select i.A1 as A11,i.C as C1 from inserted i,deleted d where i.ID=d.ID
open tc
fetch next from tc into @A,@C
while @@fetch_status=0
begin
--insert into test select @A,@C--这一句成功的
update qb.dbo.B set B1=@A where C= @C
fetch next from tc into @A,@C
end
close tc
deallocate tc
END
当执行更新A1操作时,总是更新不成功,但是执行上面隐去的插入语句却是成功的,这是为什么,难道在游标里不能执行对其它表的操作????
------解决方案--------------------
不建议用游标啊
能用其他方法实现的,尽量少用游标了(sql server很珍贵的资源)
下面这样写就行了
我想实现表A的字段A1与库qb表B的字段B1同步他们有相同的关联字段C,即当表A的A1的数据发生变动时那么更新库qb表B里的B1字段
下面是我写的代码
ALTER TRIGGER [dbo].[update_B_toA] ON [dbo].[A]
for Update
AS
declare @C varchar(20)
IF Update (A1)
BEGIN
declare @A decimal
declare tc cursor for select i.A1 as A11,i.C as C1 from inserted i,deleted d where i.ID=d.ID
open tc
fetch next from tc into @A,@C
while @@fetch_status=0
begin
--insert into test select @A,@C--这一句成功的
update qb.dbo.B set B1=@A where C= @C
fetch next from tc into @A,@C
end
close tc
deallocate tc
END
当执行更新A1操作时,总是更新不成功,但是执行上面隐去的插入语句却是成功的,这是为什么,难道在游标里不能执行对其它表的操作????
------解决方案--------------------
不建议用游标啊
能用其他方法实现的,尽量少用游标了(sql server很珍贵的资源)
下面这样写就行了
ALTER TRIGGER [dbo].[update_B_toA] ON [dbo].[A]
for Update
AS
declare @C varchar(20)
IF Update (A1)
BEGIN
UPDATE t1 SET t1.B1=t2.A1
FROM qb.dbo.B t1
INNER JOIN DELETED t2 ON t2.C=t1.C
INNER JOIN INSERTED t3 ON t2.id=t3.id
END