2010-05-04 118 views
-2

我有一個自聯接表時刪除或更新它的id我想刪除或更新所有的直接和間接影響的記錄 SQL服務器不允許這種類型的週期級聯我已經決定使用觸發器,但這個觸發器將遞歸地文件,他們將被終止在34級,我不知道記錄和事件的深度我禁用觸發器,並在完成該過程後重新啓用它,我怎樣才能構建一個SQL語句,實現這個邏輯?嵌套的sql語句

+4

來吧downvoter ......發表評論。 – spender 2010-05-04 09:21:07

+2

您有深度超過34個級別的父子引用?或者你有關係的循環引用? – Prutswonder 2010-05-04 09:21:45

+0

是我有一個循環引用,這就是爲什麼SQL服務器不允許設置級聯刪除或關係 – Hadad 2010-05-04 09:24:42

回答

2

因爲你的表中有循環引用,一個普通的SQL語句是不夠的。相反,你可以使用下面的食譜寫SQL:

  1. 創建臨時表要處理的ID。
  2. 創建一個將引用ID插入臨時表的SQL查詢。確保你不要插入重複項。
  3. 把查詢在一個循環中,並使用計數器,以確定是否記錄已被添加。如果沒有添加額外的記錄,請退出循環。
  4. 創建使用臨時表中的ID的更新語句。
  5. 刪除臨時表。