2016-04-21 28 views
0

我有一個連接到具有多個表的數據庫的web應用程序。使用外鍵刪除表中主鍵和不同表中相關行的表中的行

出於測試目的,我需要刪除表中的某一行。我使用的是以下行:

delete from EventsTable where Name = 'John's Party' 

然而,運行此我得到了以下錯誤消息時:

DELETE語句衝突與基準約束「FK_dbo.People_dbo.EventsTable_EventId」 。衝突發生在數據庫「PlannerDatabase」,表「dbo.People」,列'EventId'中。

此,我認爲,是因爲外鍵的發生被捆綁在EventsTable一個主鍵,但我的問題是:

有沒有什麼辦法,用SQL代碼儘可能少,從EventsTable中刪除「John's Party」,並在其餘表中刪除與該方相關的所有行?

我使用SQL Server Management Studio中2012

+0

你應該看看[堆棧溢出問題](http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server)。和[級聯刪除](http://www.techonthenet.com/sql_server/foreign_keys/foreign_delete.php) – Roberto

回答

0

這可沒有代碼本身來完成,通過添加On Delete Cascade觸發器表。

你可以通過執行 EXEC sp_fkeys 'EventsTable'

然後您可以創建級聯看到表中的所有引用刪除像這樣:

ALTER TABLE dbo.People DROP CONSTRAINT FK_dbo.People_dbo.EventsTable_EventId -- or whatever it's called

ALTER TABLE dbo.People ADD CONSTRAINT FK_T1_T2_Cascade FOREIGN KEY (EventId) REFERENCES dbo.EventsTable(EventId) ON DELETE CASCADE