2017-02-11 78 views
0

你好,我必须创建一个触发器,这将帮助我删除一个用户。多对多表删除触发器

示例:DELETE FROM用户WHERE Users.Id = 1

我有参照用户表,并且当我尝试从其它表删除之前i。从用户表我得到这个删除表:

The DELETE statement conflicted with the REFERENCE constraint "FK_UsersChats_Users". The conflict occurred in database "cd8eb179-8ec2-41ae-aa28-46e1571ca2bf", table "dbo.UsersChats", column 'UserId'. 

My Db diagram

到目前为止我的代码:http://pastebin.com/45H1WGSr

+0

我回滚了你的编辑。在此处编辑帖子以将[已解决]添加到标题和问题中的答案是不可接受的。如果您找到了解决方案,并且希望与未来的读者分享,请在为此目的而提供的下列空白处填写答案。有关详细信息,请参阅[我可以在这里回答我自己的问题?](http://stackoverflow.com/help/self-answer) –

+0

谢谢,我正在考虑这样做,它警告我,如果我确定我想要回答我自己的问题,我现在做tnx :) –

回答

0

您可以创建一个存储过程或从父表中删除的一系列查询,然后从每个子表中删除,或者可以在关系上设置CASCADE DELETE,以便它们自动执行。

+0

谢谢,我设法解决这个刚才只是一个小小的变化 我刚刚使用“INSTEAD OF DELETE”而不是“删除”,它都运行良好。 –

+0

这可行,但大多数数据库的人会告诉你不要使用触发器。他们工作得很好,但你往往忘记他们在那里,可以留下搔头,想知道为什么某些事情在你做出改变时破裂了,或者为什么数据正在神秘地消失。只是一个建议... – PhillipXT

+0

@PhillipXT:同样可以说是级联外键。它和触发器都是“远处行动”。也就是说,每件事都有一个时间和地点。对于这个用例,我喜欢(按照优先顺序):一个存储过程,删除用户,在用户表上触发一个级联外键。 –