2009-04-21 33 views
0

這可能是一個微不足道的問題,但我仍然會問:可以在一個數據庫中的三個或四個表中更新觸發更新到另一個數據庫中的一個或兩個表(在MS SQL 2005中?)我很樂意創建任何數量的T-SQL都是必需的,而且我也擁有VS 2008的C#能力,但從未寫過類似的觸發器。基本上,我有數據存儲庫的「GetProducts()」調用我的存儲過程任何時候任何數據加載與他們需要什麼範圍,我身體上改變了「緩存」的數據。生活中的一切都很好。如何正確實施MS SQL 2005/2008中的觸發器?

現在,他們不希望數據更新作爲存儲庫的一部分。他們認爲這是項目的外部因素,應該在沒有互動的情況下處理。

任何人有什麼建議追求什麼?已經在那裏的想法鏈接將是太棒了。

回答

2

當更新,插入或刪除一個表時,觸發器纔會啓動。如果您有特定的訂單,則必須插入表格,您可以將觸發器放在最後一個。

或者,您也可以編寫觸發器來檢查其他表以及確保所有記錄都有記錄。或者你可以爲每個表寫一個觸發器。或者,如果不需要實時更新,則可以定期運行一項作業以處理所需的更改。不知道你想要做什麼,很難說什麼是處理你的特定情況的最佳方式。無論你使用觸發器做什麼,記住觸發器對一組數據不是一次一行地操作。應始終寫入它們以處理多行插入,更新或刪除操作,或者遲早會觸發數據完整性問題。不要在遊標中這樣做,除非您希望在某人需要爲新客戶端輸入3,000,000條新記錄時將您的生產表鎖定幾個小時。

0

你問你是否更新這三張表,然後觸發一個觸發器?但是如果你只更新三個表格中的兩個,不要觸發觸發器?

您的觸發器可以更新任意數量的表格,它們也可以導致其他觸發器觸發,如果您想生活在危險的一面,您甚至可以使它們遞歸,從而導致原始觸發器再次觸發。

但是,沒有任何東西可以協調我認爲你描述的內容。不是說它不能完成。

+0

我在這個項目上工作得更多。基本上,我有三張桌子,一個父母(P)和兩個家屬,一對多(A和B)。父母和B表使用標識字段作爲其鍵(不重要),但第三個從屬表使用UPC作爲其主鍵。所有主鍵都是包含父表主鍵(標識)的組合。 當他們CRUD價格或改變upc參與(只在upc上插入或刪除)時,我需要更新添加或刪除單個產品的單個表。單一由最低的UPC決定。真是一團糟哈哈。我想我至少需要兩個觸發器。 – 2009-05-07 17:58:13

1

如果這是你想要的東西:

check database A for updates of table1, table2, table3, and or table4  
then update database B table5 and/or table6 

你需要使用一個存儲過程來封裝了所有必要的邏輯和交易在數據庫中的原始更新和數據庫B所產生的更新

+0

問題是我將如何激發存儲過程?更新可能會一次發生,我不會從系統中「加載」事件。我想我可以作弊並每十分鐘檢查一次,更新任何已更改的數據,並使用附加表格和時間戳記。 – 2009-04-27 02:41:15