2015-05-19 24 views
0

我有以下表格:無法創建第二級聯FK關係

CREATE TABLE [dbo].[Memberships](
    [MembershipId] [int] IDENTITY(1,1) NOT NULL, 
    [GroupId] [int] NOT NULL, 
    [UserId] [int] NOT NULL, 
    [IsUserAdmin] [bit] NOT NULL 
) 

CREATE TABLE [dbo].[Gifts](
    [GiftId] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](100) NOT NULL, 
    [MembershipId] [int] NOT NULL, 
    [ClaimedByMembershipId] [int] NULL 
) 

一個會員可以有許多與其相關的禮物。當成員資格被刪除時,我需要做兩件事:

  1. 刪除與MembershipId相關的任何禮物。
  2. 對於ClaimedByMembershipId等於要刪除的成員資格的MembershipId的任何記錄,請將ClaimedByMembershipId設置爲NULL

我試圖通過Management Studio的UI來實現這種級聯。我可以完成#1以下:

ALTER TABLE [dbo].[Gifts] WITH CHECK ADD CONSTRAINT [FK_Gifts_Memberships] 
FOREIGN KEY([MembershipId]) 
REFERENCES [dbo].[Memberships] ([MembershipId]) 
ON DELETE CASCADE 
GO 

#2,我無法保存表格製作,我相信會是這個樣子的鍵後:

ALTER TABLE [dbo].[Gifts] WITH CHECK ADD CONSTRAINT [FK_Gifts_Memberships1] 
FOREIGN KEY([ClaimedByMembershipId]) 
REFERENCES [dbo].[Memberships] ([MembershipId]) 
ON NULL CASCADE 
GO 

我得到出現以下錯誤:

'Memberships' table saved successfully 
'Gifts' table 
- Unable to create relationship 'FK_Gifts_Memberships1'. 
Introducing FOREIGN KEY constraint 'FK_Gifts_Memberships1' on table 'Gifts' may cause cycles 
or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify 
other FOREIGN KEY constraints. 
Could not create constraint. See previous errors. 

在此先感謝。

回答

0

嗯,這就像錯誤說。您不能創建循環級聯路徑。如果TableA可以導致TableB上的級聯刪除,則TableB不會導致TableA上的級聯刪除。期。即使在你的具體情況下,它在邏輯上似乎應該沒問題,但SQL Server不會允許它。無法覆蓋。

你最好能做的就是用觸發器處理你的#2需求。