0

我有3个表SQL服务器 - 行通过在子表触发不可用父表触发器加入

  1. ParentTable
  2. ChildTable(与列ParentId指的ParentTable
  3. Recording(与列ParentId闯民宅到自己的表)

父表有一个触发器,它添加一行int o Recording表。

子表再有,在Recording表追加行触发

现在,我得到该行未在Recording

INSERT语句冲突与外键相同的表发现错误 约束

+1

在您的问题中添加表格和触发器的定义。 – 2012-01-10 07:48:48

回答

0

您可能会触发重复的ParentID以插入到记录表中。如果Recording表中的ParentID具有定义的唯一键,则情况会如此。

当插入到父表中时,您将具有ParentID的记录插入到记录中。我想你在ChildTable触发器上插入一个重复的ParentID。

也许你可以提供更多的上下文。

另外,如果可能的话,您可能需要避免使用触发器 - 这是大部分时间。使用CTE和OUTPUT子句可以帮助您避免触发器问题。

+0

强烈建议避免触发器。有很多时候这是确保数据完整性的最佳方式。 – HLGEM 2012-01-10 22:26:22

+0

@HLGEM触发器有它们自己的位置,但有更好的方法来执行完整性比触发器。在处理嵌套事务和大量数据时,从维护的角度来看,触发器会变得非常痛苦。还有很多情况下,回滚也会导致完整性问题。 MS正在摆脱触发器,并且全面的最佳实践就是开始做同样的事情。通过编码良好的CTE,您不需要其他任何东西来执行您的完整性。 – Charl 2012-01-11 05:47:19

+0

只是为了清楚起见 - 我不强烈反对触发器,只是说尽量避免它们。如果系统很大程度上依赖于触发器,请将它们保留在那里。但对于任何新东西,总是有比触发器更好的答案 - 如果你使用的是SQL 2008及更高版本。 – Charl 2012-01-11 05:49:54