2009-12-10 44 views
1

5年後我剛回到現場,非常生鏽,請耐心等待。我正在研究sql server express,並且需要從單個表中捕獲新的/更新的記錄(實際上只包含它們的一部分),以便插入到另一個表中。 (我將使用這個其他表作爲水晶報表的數據源。)我沒有測試環境,必須構建並填充大約6個表來測試觸發器。觸發是我唯一的選擇嗎?感謝您的任何意見。是我需要的觸發器嗎?

回答

0

是的,你是對的。這是他們用來做什麼的。

3

首先,得到一個測試環境。沒有安全的人就無法工作。

可以使用觸發器這個沒錯,但你真的需要一個單獨的表或將查詢或視圖(不知道你是否可以在表達某種觀點)做的報告,而不是源。 /刪除

如果您選擇使用觸發器,請務必測試multpe行插入/更新。觸發器需要設計爲一次處理一組數據而不是一行。

+0

聖鉬!我完全忘記了你可以在水晶報告中做到這一點。謝謝你太多了!你爲我節省了幾周的工作。如果可以的話,我會吻你。 Thx再次:D – 2009-12-11 18:27:58

4

如果您有2005/2008,也可以使用OUTPUT,如this example - 提供您控制插入。

+0

OUTPUT是最好的選擇,因爲觸發器不是那麼明顯。有些事情你不能在OUTPUT中完成,但它的設計恰恰是OP正在嘗試進行的審計類型。 – womp 2009-12-10 22:38:00

0

觸發器是像正則表達式,如果你有問題,你用任何一個解決這個問題,現在你有兩個問題。我只是想從你的客戶端代碼中插入單個事務。主要是因爲像Triggers這樣的副作用編程只是要求問題出現。如果意外插入了一些不良數據並觸發了觸發器,則無法輕鬆撤消觸發器的操作。觸發器應該是解決方案或最後的手段。插入不再是orthogonal,這導致很難維護代碼。有許多更好的設計決策,像其他人提到的Views,如果數據庫支持它們,Materialized Views是更好的解決方案。

+0

如果你有一個能幹的dba,觸發器不難維護。對於任何涉及無法通過約束或唯一索引處理的數據完整性的問題,它們都是最佳解決方案。數據完整性不能從應用程序維護,因爲它不是唯一改變數據庫中數據的東西。因爲你認爲他們很難使用觸發器,所以最好是短視的。 – HLGEM 2009-12-11 14:01:54

+1

t are不是「硬」,他們是越野車,是副作用編程的反模式。就像我說的那樣,它們不是正交的,可以是非確定性的。避免觸發器是好建議。 – 2009-12-29 18:06:29