我相信这是可能的,但对于我的生活我无法弄清楚。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