2013-07-18 53 views
0

我在我的数据库中的表中有一个删除触发器,应该是将行插入到“审计”表中,但是当我从触发器表中删除行时,它们不会显示在审计中表。我有插入和更新触发器遵循这种相同的格式,工作正常,但我似乎无法得到这一个工作。这里是触发:删除触发器不工作

USE [OutageDev] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[tr_audOutageSummaryDelete] 
ON [dbo].[Outage Summary] 
AFTER DELETE 
AS 
    BEGIN 
     -- SET NOCOUNT ON added to prevent extra result sets from 
     -- interfering with SELECT statements. 
     SET NOCOUNT ON; 

     INSERT INTO dbo.[Outage Summary Audit] 
        (OutageSummaryID, 
        Dispatcher, 
        /*Removed columns for brevity*/ 
        StateEmergency, 
        Comment, 
        AuditDateTime, 
        AuditUser, 
        AuditAction) 
     SELECT d.OutageSummaryID, 
      d.Dispatcher, 
      /*Removed columns for brevity*/ 
      d.StateEmergency, 
      t.Comment, 
      GETDATE(), 
      SUSER_SNAME(), 
      'DELETE' 
     FROM deleted d 
      JOIN [Outage Summary] t 
       ON d.OutageSummaryID = t.OutageSummaryID 
    END 
+0

看起来它应该工作。行是否与删除的记录中的'OutageSummaryID'完全匹配?如果是的话,触发器肯定启用? –

+0

感谢您的编辑。触发器已启用。 OutageSummaryID是表格的PK,所以我认为他们必须匹配。 – philthyfool

+0

哦,我明白了。我没有意识到这个连接回到了基础表上。你根本不应该有'JOIN'。只需使用'd.Comment'而不是't.Comment'并摆脱连接。 –

回答

0

以供将来参考,我与触发器表以选择是类型ntext的,因为这是它如何工作了我的INSERT和UPDATE触发器列加入已删除的表。由于这是删除后触发器,因此我试图选择的行已被删除。我将ntext中的列转换为nvarchar(max),摆脱了连接,现在工作正常。