SQL 服务器 - 使用触发器从表中删除行



我在SQL服务器方面遇到问题,我需要创建一个以这种方式工作的触发器:

每次我将信息插入 tblNotInterest 时(在表格内我有两列"电子邮件 1"和"电子邮件 2"(。触发器需要检查"email1"和"email2"是否已存在于名为tblListOf的不同表中。如果它们存在,我需要删除找到它们的行。

也许你可以做这样的事情:

DELETE FROM tblListOf 
WHERE EXISTS (SELECT * FROM tblNotInterested
WHERE tblNotInterested.email1 = tblListOf.email1 and tblNotInterested.email2 = tblListOf.email2)

插入和删除的表可能非常有用,但它们绝对是买家要注意的,因为......

  • 他们并不总是适合简单的文档
  • 它们对客户端应用程序不可见
  • 由于昂贵的锁,它们可能存在性能或可扩展性问题

话虽如此,我相信下面的代码应该适用于这种情况。 最后一个警告/问题可能是围绕两个表中的可为空的列。 如果 email1 或 email2 在任何表上都可为空,我会考虑重新评估此代码。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.trig_i_tblNotInterested_MatchingEmail1AndEmail2
   ON  dbo.tblNotInterested
   AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DELETE L
        FROM dbo.tblListOf L
        INNER JOIN inserted ins
            ON L.email1 = ins.email1
            AND L.email2 = ins.email2
END
GO

最新更新