我有3个表SQL服务器 - 行通过在子表触发不可用父表触发器加入
ParentTable
ChildTable
(与列ParentId
指的ParentTable
)Recording
(与列ParentId
闯民宅到自己的表)
父表有一个触发器,它添加一行int o Recording
表。
子表再有,在Recording
表追加行触发
现在,我得到该行未在Recording
表
INSERT语句冲突与外键相同的表发现错误 约束
我有3个表SQL服务器 - 行通过在子表触发不可用父表触发器加入
ParentTable
ChildTable
(与列ParentId
指的ParentTable
)Recording
(与列ParentId
闯民宅到自己的表)父表有一个触发器,它添加一行int o Recording
表。
子表再有,在Recording
表追加行触发
现在,我得到该行未在Recording
表
INSERT语句冲突与外键相同的表发现错误 约束
您可能会触发重复的ParentID以插入到记录表中。如果Recording表中的ParentID具有定义的唯一键,则情况会如此。
当插入到父表中时,您将具有ParentID的记录插入到记录中。我想你在ChildTable触发器上插入一个重复的ParentID。
也许你可以提供更多的上下文。
另外,如果可能的话,您可能需要避免使用触发器 - 这是大部分时间。使用CTE和OUTPUT子句可以帮助您避免触发器问题。
强烈建议避免触发器。有很多时候这是确保数据完整性的最佳方式。 – HLGEM 2012-01-10 22:26:22
@HLGEM触发器有它们自己的位置,但有更好的方法来执行完整性比触发器。在处理嵌套事务和大量数据时,从维护的角度来看,触发器会变得非常痛苦。还有很多情况下,回滚也会导致完整性问题。 MS正在摆脱触发器,并且全面的最佳实践就是开始做同样的事情。通过编码良好的CTE,您不需要其他任何东西来执行您的完整性。 – Charl 2012-01-11 05:47:19
只是为了清楚起见 - 我不强烈反对触发器,只是说尽量避免它们。如果系统很大程度上依赖于触发器,请将它们保留在那里。但对于任何新东西,总是有比触发器更好的答案 - 如果你使用的是SQL 2008及更高版本。 – Charl 2012-01-11 05:49:54
在您的问题中添加表格和触发器的定义。 – 2012-01-10 07:48:48