【发布时间】:2012-12-10 13:08:30
【问题描述】:
我有以下表格:回复和消息。我想模仿 Facebook 的行为:当一条消息被删除时,所有相关的回复也会被删除。我的表格如下所示:
REPLIES
messageId replyId
6b61d107-dff3-4374-a3a2-75ac7478a2f2 865c873d-0210-482a-b8bd-371c4f07f0cf
MESSAGES
id body
865c873d-0210-482a-b8bd-371c4f07f0cf this is the reply
6b61d107-dff3-4374-a3a2-75ac7478a2f2 this is the message
我创建了一个第一个触发器,它可以在删除消息时删除回复中的相关行。我现在想创建另一个触发器,它会在每次删除回复中的一行时删除相关消息。现在回复变成了他们自己的消息,这是没有意义的。这是第二个触发器:
CREATE TRIGGER TRG_DEL_MESSAGES
ON Replies
FOR DELETE
AS
DELETE FROM Messages WHERE id = (SELECT replyId FROM DELETED)
当我尝试删除某些内容时会带来以下错误:
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
显然存在一个无限循环,我认为这是因为 DELETED 表被第一个触发器(引发第二个触发器)的数据填充。但我真的不确定,我会很感激一些帮助。谢谢!
【问题讨论】:
-
Visual Studio 2010 中的 SQL Express。
-
简单的答案是不要使用嵌套触发器......它们会导致您正在查看的问题。如果您改用存储过程,您的生活会更轻松,代码也不会那么混乱,因为它都在一个地方。
-
另一个建议...你为什么不使用级联删除?
-
@Boomer:级联删除是我的第一次尝试,但我遇到了同样的问题。
-
您在尝试级联删除之前是否禁用了触发器?
标签: asp.net sql sql-server triggers