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