2017-02-11 73 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:同樣可以說是級聯外鍵。它和觸發器都是「遠處行動」。也就是說,每件事都有一個時間和地點。對於這個用例,我喜歡(按照優先順序):一個存儲過程,刪除用戶,在用戶表上觸發一個級聯外鍵。 –