指向同一父列的两个FK-更新级联-SQL Server

指向同一父列的两个FK-更新级联-SQL Server,sql,sql-server,parent-child,foreign-key-relationship,Sql,Sql Server,Parent Child,Foreign Key Relationship,下面是一个场景。 -父表:团队成员,主键为RecID -子表:TEAMMEMBERTASKS TEAMMEMBERTASKS表中有两列,ReportedBy和AssignedTo。 这两列都使用RecID存储报告任务的团队成员以及任务分配给的团队成员。两列的RecID可能相同,但情况并非总是如此 我需要为检查与父项的关系的两个子列添加FK,并且我希望将更新级联添加到两个外键 每当我尝试这样做时,我的第二个外键就会抛出一个“可能导致循环或多个级联路径”错误 这是我的密码: ALTER TABLE

下面是一个场景。 -父表:团队成员,主键为RecID -子表:TEAMMEMBERTASKS

TEAMMEMBERTASKS表中有两列,ReportedBy和AssignedTo。 这两列都使用RecID存储报告任务的团队成员以及任务分配给的团队成员。两列的RecID可能相同,但情况并非总是如此

我需要为检查与父项的关系的两个子列添加FK,并且我希望将更新级联添加到两个外键

每当我尝试这样做时,我的第二个外键就会抛出一个“可能导致循环或多个级联路径”错误

这是我的密码:

ALTER TABLE [dbo].[TEAMMEMBERTASKS]  WITH CHECK ADD  CONSTRAINT 
[FK_AssignedTo_TeamMemberRecID] FOREIGN KEY([AssignedTo])
REFERENCES [dbo].[TEAMMEMBERS] ([RecID])
GO

ALTER TABLE [dbo].[TEAMMEMBERTASKS] CHECK CONSTRAINT 
[FK_AssignedTo_TeamMemberRecID]  
GO

ALTER TABLE [dbo].[TEAMMEMBERTASKS]  WITH CHECK ADD  CONSTRAINT 
[FK_ReportedBy_TeamMemberRecID] FOREIGN KEY([ReportedBy])
REFERENCES [dbo].[TEAMMEMBERS] ([RecID])
ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[TEAMMEMBERTASKS] CHECK CONSTRAINT 
[FK_ReportedBy_TeamMemberRecID]
GO
对于当前代码,这会导致RecID在两个子列中都被更新,还是会导致update命令被限制


我是否应该继续写一个触发器来处理这个问题呢?

您希望通过更新级联上的
来实现什么?是否需要更新表的主键
RecID
?如果是这样,它可能不是一个好的主键<更新级联上的代码>远没有人们想象的那么有用。(
关于删除级联/NULLIFY
是另一回事)。我可能完全搞不清楚更新级联的
做了什么。我要确保的是,如果父表中的
RecID
发生了更改,那么子表中的RecID也会发生更改
RecID
永远不应该更改,但我想确保我已经准备好了一些东西来处理它发生的可能性。问题是,它已经被“处理”了——更新将被拒绝。除非有人能为它做一个商业案例,否则花费精力使之成为可能不仅不值得,而且可能会导致不希望出现的情况。
RecID
IDENTITY
还是其他代理密钥?在这种情况下,更新它既不必要也不可取。这是一个业务关键,像一个名字出生年份组合?在这种情况下,使更新成为可能是值得的,但是,是的,您需要为它编写一个触发器,因为声明完整性非常保守。这怎么不重复呢?您是否用“sql server”搜索了错误消息?如