【问题标题】:SQL insert, delete, updateSQL插入、删除、更新
【发布时间】:2013-06-08 03:48:57
【问题描述】:

所以我看到 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

这是我目前的触发器

【问题讨论】:

    标签: mysql sql sql-server-2012-express


    【解决方案1】:

    没有updated 虚拟表这样的东西。当更新发生时,旧值可能会在 deleted 中找到,新值在 inserted

    Use the inserted and deleted Tables
    删除的表在 DELETE 期间存储受影响行的副本,并且 UPDATE 语句。在执行 DELETE 或 UPDATE 期间 语句,行从触发器表中删除并转移到 删除的表。

    删除表和触发器表一般 没有共同的行。插入的表存储了 在 INSERT 和 UPDATE 语句期间受影响的行。在插入或 更新事务,新行被添加到插入的表和 触发器表。插入表中的行是 触发器表中的新行。

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

    【讨论】:

    • 所以基本上所有的更新信息都是在删除旧条目后新插入的?
    • @user1889231 这仅意味着从触发器的角度来看,它是一对删除和插入操作。包含来自文档的下一段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2011-11-25
    • 2011-05-15
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多