2011-03-16 38 views
2

我想寫一個獨特的查詢來存儲在不同的表中相同的值 例如: 我有aa和bb tables.with屬性no,地址,phoneno,城市。 在這個no和city都一樣,其餘都不一樣。 在這兩個表中,一些屬性是唯一的,一些是不同的 ,我想在sql服務器中使用一個查詢更新2個表。獨特查詢在不同的表中存儲值

+0

您無法使用一條'UPDATE'語句更新兩個表。但是您可以創建一個存儲過程來執行此操作 - 執行兩個單獨的更新。 – 2011-03-16 14:15:54

+0

可以給我的程序語法 – Ddev 2011-03-16 14:25:01

+0

'CREATE PROCEDURE' http://msdn.microsoft.com/en-us/library/ms187926.aspx – 2011-03-16 14:27:38

回答

2

您將不得不比一個簡單的查詢更高級一點來完成此操作。我的建議是,你可能應該規範你的設計把數字和城市放在一個單獨的表中,然後只需鏈接到另外兩個表中的這個表。

一般而言,您不應將信息複製到多個表中。但是也有例外。


但是你沒有問諮詢所以你可能有理由這樣做你問的方式。如果這仍然是你想要下去的路徑,你的選擇是由你使用什麼SQL的口味決定的。在許多SQL平臺上,您可以使用存儲過程完成此操作。在某些情況下,您可以使用視圖,觸發器和存儲過程。我會給你一個每個選項的快速簡介。

- 存儲過程 寫一個或多個存儲過程(或許每一個插入,更新,刪除),這些程序把你的值作爲參數。 proc然後在每個表上依次運行查詢。

- 存儲過程+查看+觸發 (你可以做到這一點MS SQL服務器上,但我不知道其他人。)這裏你創建你合併兩個表的單一視圖。 (加入你的共同領域。)這給你一個基本上是兩個表連接在一起的觀點。現在,由於該視圖基於兩個表格,因此它變成了不可更新的視圖。但是,您可以將存儲過程附加到視圖以進行插入,更新和刪除操作。在這裏你做的和第一種方法一樣,你創建了幾個過程來實際更新視圖下兩個表中的數據。這些過程有點不同,因爲這些過程需要設計爲觸發器。然後將這些特效附加到插入,更新或刪除視圖的觸發器。完成所有工作後,您應該能夠直接在視圖上插入,更新或刪除數據,並查看基礎表中的更改。


如果這一切看起來真的很複雜,那是因爲它。如果您有其他選項,例如規範化數據結構來解決問題,則應首先嚐試。如果你真的沒有選擇和觸發器可用,第二個選項工作得很好。