2012-01-31 53 views
0

我有TABLE_A和另一個數據庫我有TABLE_B。 TABLE_A上有一個觸發器來複制從TABLE_A到TABLE_B的插入。如果在觸發器上失敗,TABLE_A上的插入操作不會失敗(我無法控制TABLE_A,可以刪除或重命名列等等)。如果在觸發器中失敗,則在TABLE_A中插入不應失敗。怎麼樣?

我與SQL Server 2005工作

我tryed TRY ... CATCH,但沒有奏效。

謝謝。

+0

這是'AFTER INSERT'嗎?你還試過什麼?TRY ... CATCH? – JNK 2012-01-31 15:12:28

+0

我在CATCH中沒有代碼來忽略錯誤並繼續,但是一直在回滾。 – Neves 2012-02-01 10:41:47

回答

3

使用觸發器 - 是一個原子操作 - 它可以完成沒有錯誤或失敗整個操作(INSERT +觸發器)。嘗試使用其他變體,例如使用SP爲表添加記錄。

3

看看this other StackOverflow question

但最終,觸發器會在與您正在查找的內容相反的隱式事務中運行。解決這個問題的另一種方法可能是你最好的選擇。

2

我會把它移到異步風格的操作。對TABLE_A進行更改操作,將複製相應記錄的請求排隊,並使單獨的進程監視該隊列。這樣,您不會將複製過程綁定到插入事務中,只有複製操作的排隊與插入事務綁定。

+0

該排隊過程如何實施? – Neves 2012-02-01 10:39:58

+0

@Neves由於數據顯然不能完美同步(否則你會希望觸發失敗),某種程度的差異是可以接受的。問題將是這段時間應該是多長時間。如果更改量較低,則可以使用sp_start_job啓動作業,也可以寫入表並使定期計劃的作業查看錶並執行同步。我不確定在事務之外是否有高性能的更新 - 所有這些都會涉及在事務之外創建另一個連接(如通過SQLCLR)。 – 2012-02-01 13:52:00