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