2013-08-21 161 views
1

我有10個表,我想用相同的值更新所有這些表中的相同字段。更新的條件是一個表是主鍵的字段,在其他表中是外鍵,有些表甚至不是關鍵字。例如:有沒有更好的方法來更新多個表中的相同字段?

TABLEX    TABLEY     TABLEZ   

    FIELD1 (PK)   FIELD1(FK)    FIELD1    
    FIELD3    FIELD3     FIELD3 

我想更新相同FIELD1的所有表中具有相同值的FIELD3。我被告知使用存儲過程使用遊標a for循環來更新表格,並且在調查了一下之後,我已經讀取了這個遊標非常省時。我想知道這是否是最好的方法,或者如果你知道更好的方法。我相當新的SQL。

Thx提前。

+3

如果同一個字段出現在十個不同的表中,也許數據庫設計有問題嗎? – FrankPl

+1

爲什麼不試試觸發器。當你更新第一張表時更新所有其他表以及同時更新所有其他表。 – Harshit

+1

關係數據庫不應該要求這樣做。如果結構已經標準化,數據只能出現在一張表中。如果它已經被解除標準化,比如緩存結果在多個地方,那麼你將不得不發佈10個UPDATE。 – MatBailie

回答

2

你真的不需要使用遊標循環 - 一個簡單的SQL UPDATE語句在所有10個表上都可以正常工作。但是,你必須發佈10個獨立的UPDATE語句,這是沒有辦法的。

注意:如果您使用的是動態SQL,那麼最終的代碼可能會少一些,但我非常推薦使用它,原因很多:代碼可讀性,破壞內置SQL對象依賴項跟蹤,SQL注入的可能性......)

+0

我忘了提及這個更新應該是每天晚上發生的。所以我猜測存儲過程是必須的,因爲我必須安排它。我仍然可以結合觸發器使用該過程,或者按照您的建議進行更新。你認爲使用觸發器對你的解決方案會更好嗎? Thx – Negashion

+1

我的建議是儘量避免觸發器,除非它非常基本,例如插入序列。這有兩個原因 - 代碼的可維護性(包/程序)以及臭名昭着的變異錯誤。 –

相關問題