我相信這是可能的,但對於我的生活我無法弄清楚。mssql表多外鍵級聯
我創建的是一個用戶歷史MSSQL表,用於保存對用戶和由誰進行的更改。該表包含兩個引用我的另一個表(用戶)的外鍵 - 一個用於受影響用戶的fkey和另一個用於進行更改的用戶的fkey。
我需要的是對(用戶)表進行任何更改以級聯和更新此新表中的相應條目。
在新表(User_History)的字段如下(每個用戶由兩個字段識別的):
Affected_User_House_Id - int
Affected_User_Id - int
Modified_By_User_House_Id - int
Modified_By_User_Id – int
Modification_Date - datetime
ModificationMade - ntext
每個字段是除了「ModificationMade」主鍵。字段「Modification_Date」精確到1秒。 我遇到的問題是創建所述級聯。 我試圖運行下面的T-SQL代碼:
ALTER TABLE [User_History] WITH CHECK
ADD CONSTRAINT [FK_User_History_User] FOREIGN KEY([Affected_User_House_Id], [Affected_User_Id])
REFERENCES [User] ([User_House_Id], [User_ID])
ON UPDATE CASCADE
GO
ALTER TABLE [User_History] CHECK CONSTRAINT [FK_User_History_User]
GO
ALTER TABLE [User_History] WITH CHECK
ADD CONSTRAINT [FK_User_History_User_ModifiedBy] FOREIGN KEY([Modified_By_User_House_Id], [Modified_By_User_Id])
REFERENCES [User] ([User_House_Id], [User_ID])
ON UPDATE CASCADE
GO
ALTER TABLE [User_History] CHECK CONSTRAINT [FK_User_History_User_ModifiedBy]
GO
這件T-SQL給了我以下錯誤:
*'User' table saved successfully
'User_History' table
- Unable to create relationship 'FK_User_History_User_ModifiedBy'.
Introducing FOREIGN KEY constraint 'FK_User_History_User_ModifiedBy' on table 'User_History' 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.*
代碼工作,如果我刪除第二個「ON UPDATE CASCADE」的但是這將意味着「Modified_By_User_House_Id」和「Modified_By_User_Id」字段中的值不會更新以匹配其在用戶表中引用的值。
我對如何實現這一目標感到迷茫。
您是否嘗試過將ON DELETE NO ACTION'到第二個約束? – Kermit
你需要選擇一個強制執行另一個執行另一個強制執行,如果有的話。正如你所發現的那樣,SQL Server不能強制執行級聯。這是因爲兩個FK都指向同一父母,它只能從一個FK級聯到父母。 – Beth