我需要为我的文章表设置两个不同列的两个外键引用。 他们两个都必须引用我的材料表的同一列。 但如果我尝试创建第二个,我得到以下错误:
Meldung 1785,Ebene 16,Status 0,Zeile 3
DasEinführenderFOREIGN KEY-Einschränkung'FK_db00_02_Artikelstamm_WST_db08_01_Werkstoffe_Bezeichnung'fürdiedb00_02_Artikelstamm-Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen。 Geben Sie ON删除没有行动或更新行动a,oderändernSieandere FOREIGN KEY-Einschränkungen。
为db00_02_Artikelstamm表引入FOREIGN KEY约束'FK_db00_02_Artikelstamm_WST_db08_01_Werkstoffe_Bezeichnung'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束
我尝试使用此SQL代码创建它们:
-- Fremdschlüssel db00_02_Artikelstamm.WST -> db08_Werkstoffe.Bezeichnung
-- FK_db00_02_Artikelstamm_WST_db08_Werkstoffe_Bezeichnung
ALTER TABLE [dbo].[db00_02_Artikelstamm] WITH CHECK
ADD CONSTRAINT [FK_db00_02_Artikelstamm_WST_db08_Werkstoffe_Bezeichnung] FOREIGN KEY ([WST])
REFERENCES [dbo].[db08_Werkstoffe] ([Bezeichnung]) ON UPDATE CASCADE
GO
ALTER TABLE [dbo].[db00_02_Artikelstamm] CHECK CONSTRAINT [FK_db00_02_Artikelstamm_WST_db08_Werkstoffe_Bezeichnung]
GO
-- Fremdschlüssel db00_02_Artikelstamm.WSTgroup -> db08_Werkstoffe.Bezeichnung
-- FK_db00_02_Artikelstamm_WSTgroup_db08_Werkstoffe_Bezeichnung
ALTER TABLE [dbo].[db00_02_Artikelstamm] WITH CHECK
ADD CONSTRAINT [FK_db00_02_Artikelstamm_WSTgroup_db08_Werkstoffe_Bezeichnung] FOREIGN KEY ([WSTgroup])
REFERENCES [dbo].[db08_Werkstoffe] ([Bezeichnung]) ON UPDATE CASCADE
GO
ALTER TABLE [dbo].[db00_02_Artikelstamm] CHECK CONSTRAINT [FK_db00_02_Artikelstamm_WSTgroup_db08_Werkstoffe_Bezeichnung]
GO
我需要的是:
我使用MS SQL Server。
我希望我能清楚地解释清楚,有人可以帮助我。
提前致谢!
答案 0 :(得分:0)
也许您应该使用univoque id作为引用,然后避免“on update cascade”,因为在这种情况下,您可以修改文章的名称,而无需担心对“childs”表的更改传播。 通过这种方式,已经暗示了关于物品表中材料参考变化的约束。
暂停删除约束可以在材料表上声明,其中包含“ON DELETE NO ACTION”
评论后 更新..
如上所述,如果你有一个manteinance和遗留代码的问题,我认为你已经实现了一些软件解决方案,否则我认为最好的解决方案,如果你的“材料”表的引用没有传播到许多其他表,它是备份所有必须修改的表,将新主键添加到物料表中当前唯一的物料名称(如果尚未存在),然后删除指向物料表中物料表的外键,然后更新每篇文章的fk_field中的值,其中每个材质的主要对应于fk_field包含的当前名称,然后添加新的外键。