我对 TB 进行UPDATE UPDATE TB ZT='是' WHERE XF>'2012-12-21' AND XF<'2012-12-31' 变更了100条记录;但是TB触发器只执行了一条记录,对应的表只变更一条。
请问, 如何办?
CREATE TRIGGER TB_UPDATE ON dbo.TB
FOR UPDATE
AS
declare @NEW_ZT char(2),@OLD_ZT char(2),@YH CHAR(1)
SELECT @NEW_ZT=INSERTED.ZT FROM INSERTED
SELECT @OLD_ZT=DELETED.ZT FROM DELETED
SELECT @YH=INSERTED.YH FROM INSERTED
IF @OLD_ZT='否' and @NEW_ZT='是'
begin
UPDATE YB SET FS=FS+1 WHERE YH=@YH
end
请问, 如何办?
CREATE TRIGGER TB_UPDATE ON dbo.TB
FOR UPDATE
AS
declare @NEW_ZT char(2),@OLD_ZT char(2),@YH CHAR(1)
SELECT @NEW_ZT=INSERTED.ZT FROM INSERTED
SELECT @OLD_ZT=DELETED.ZT FROM DELETED
SELECT @YH=INSERTED.YH FROM INSERTED
IF @OLD_ZT='否' and @NEW_ZT='是'
begin
UPDATE YB SET FS=FS+1 WHERE YH=@YH
end
begin
if exists(select 1 from inserted where ZT = '否') and exists(select 1 from deleted where zt = '是')
UPDATE YB SET FS=FS+1 WHERE YH = (select yh from inserted)
end
CREATE TRIGGER TB_UPDATE ON dbo.TB
FOR UPDATE
as
update a
set a.FS=a.FS+1
from YB a
inner join inserted b on a.YH=b.YH
where b.YH in
(select c.YH
from deleted c
inner join inserted d on c.YH=d.YH
where c.ZT='否' and d.ZT='是'
)
你这个触发器,肯定能做一个回补确认变更的过程。 但是用了两个 exists(select...) 会不会降低数据库性能, 让这项工作占用更多的资源
你这个也可以完成这个批量的UPDATE 触发。 但是,用到了 join in(select 这样一来是不是大大的占用了资源? 如果这类触发事件是经常会发生的话,这个方法是不是不太好?
还有更好的办法吗?
你的意思是说, 在SQL企业管理器里,对这两个表的这个字段创建好索引了就行了?
UPDATE 表A SET YH=‘A’ WHERE xxxxx表A 有多条记录受到这个UPDATE影响。 在触发器里对该YH字段变为A 有操作但是只对一条记录产生了操作。