0

所以我看到 SQL 有一些表,其中包含可能引用的表中新插入和删除的数据。我没有注意到这样的更新数据表。我目前正在使用触发器,我需要将触发器应用于更新。我怎么做?

USE [examene]
GO
/****** Object:  Trigger [dbo].[trig1]    Script Date: 6/8/2013 6:48:26 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[trig1] on [dbo].[participari]
after insert,update,delete
as
begin
    if (exists (select * from deleted))
        rollback

    if (exists (select * from inserted,proiecte
where inserted.idpr = proiecte.idpr
and deadline<dela union 
select * from inserted,proiecte
where inserted.idpr = proiecte.idpr and inserted.panala>proiecte.deadline))
        rollback
end

到目前为止,这是我的触发器

4

1 回答 1

1

没有updated虚拟表之类的东西。发生更新时,可能会在其中找到旧值并在其中找到deleted新值inserted

使用插入和删除的表删除的表在 DELETE 和UPDATE语句
期间存储受影响行的副本 在执行 DELETE 或 UPDATE 语句期间,行会从触发器表中删除并转移到已删除的表中。

删除的表和触发器表通常没有共同的行。插入的表在 INSERT 和UPDATE语句期间存储受影响行的副本。在插入或更新事务期间,新行会同时添加到插入表和触发器表中。插入表中的行是触发器表中新行的副本。

更新事务类似于删除操作后跟插入操作;先将旧行复制到已删除表中,然后将新行复制到触发器表和插入表中。

于 2013-06-08T04:04:47.773 回答