2011-01-31 83 views
0

我有一個分貝說DB1,對DB1在一個表(DB1.t1)增加一列,觸發器和由同名表中創建同一行的副本(DB2.t1 )在另一個DB2中。使用插入行的標識,我需要在DB2中的另一個表(DB2.t2)中添加一些行。外國關鍵問題多分貝

問題是,我需要在DB1.t1和DB2.t2插入在一個事務中。試圖這樣做時,DB1.t1插入正常,但由於未提交,DB2.t1不包含該行,因此DB2.t2無法插入新行(缺少外鍵),仍然在發送來自應用程序的數據時正常。

一種選擇是太提交DB1的交易,然後做DB2操作,但也有相關的其他功能。請提出實現它的最佳方式。

回答

0

在存儲過程的一個事務中完成所有操作。查看如何在線完成圖書交易。確保在出現錯誤時進行回滾(使用try catch塊)。也使用OUTPUT子句或Scope_identity()從table1獲取身份。

+0

我按照您提問的方式進行操作。我正在調用DB1上的一個SP,並從SP調用第二個DB2 sp。兩者都在一個事務中,我可以從DB1獲取ID,但由於相同的ID不在DB2上,它總是拋出異常並回滾。 – hungryMind

3

好,Id列是沒有意義的「鑰匙」,他們會發覺你的所有的地方。它們應該是沒有意義的物理標識符,並且你賦予它們意義。當您要求在另一個數據庫中存在相同的Ids時。

您是否解決了FK違規?對於DB2中的DB1行,很可能您有一個完全不同的Id;和肯定不同的父母Ids

您需要持續指定Id價值,並讓服務器填補它,或總是指定Id值,在這兩個數據庫。

第二個問題是,你是不是thniking事務。多分貝交易完全沒有問題。因此,忘記Id列,它包含什麼,並在這兩個數據庫中使用表的真實密鑰。 ids將有所不同,但誰在乎(這意味着釋放需要附加無意義標識符的含義)。