Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 删除触发器不工作_Sql Server 2008_Triggers - Fatal编程技术网

Sql server 2008 删除触发器不工作

Sql server 2008 删除触发器不工作,sql-server-2008,triggers,Sql Server 2008,Triggers,我在数据库中的一个表上有一个delete触发器,该触发器本应将行插入“audit”表中,但当我从触发器表中删除行时,它们不会显示在audit表中。我有使用相同格式的insert和update触发器,可以很好地工作,但我似乎无法让这个触发器工作。触发因素如下: USE [OutageDev] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[tr_audOutageSummaryDelete] ON [

我在数据库中的一个表上有一个delete触发器,该触发器本应将行插入“audit”表中,但当我从触发器表中删除行时,它们不会显示在audit表中。我有使用相同格式的insert和update触发器,可以很好地工作,但我似乎无法让这个触发器工作。触发因素如下:

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 

为了便于将来参考,我将删除的表与触发器表连接起来,以便选择类型为ntext的列,因为这是我的insert和update触发器的工作方式。由于这是一个after delete触发器,因此我试图选择的行已被删除。我将列从ntext转换为nvarchar(max),并去掉了join,现在可以正常工作了。

看起来应该可以工作了。行是否确实与已删除记录中的
OutageSummaryID
匹配?如果是这样的话,触发器是否确实启用了?谢谢您的编辑。触发器已启用。OutageSummaryID是表的主键,所以我认为它们必须匹配。哦,我明白了。我没有意识到连接回到了基表上。你根本不应该让
加入
。只需使用
d.Comment
而不是
t.Comment
,然后去掉连接。还有另一个问题,我也应该解决,可能是造成这个问题的原因。注释列的类型为ntext,因此对于更新和插入触发器,我从触发器表中选择它。但是,现在我想起来了,这可能在后删除触发器上不起作用,因为行已经被删除了,是吗?是的,这不起作用。在2008年,您不能将列数据类型更改为无此限制的
nvarchar(max)