2011-12-30 18 views
0

我會冒險猜測,如果我在兩個地方都這麼做,交易管理將會出現「有限」的問題。如果我正在定義我正在調用的存儲過程中的事務,那麼我應該在.NET代碼中使用事務嗎?

我想我能想到在應用程序級別進行事務的原因是,業務特定邏輯可能無法在sprocs中使用(即在整理和計算從檢索到的數據導出的某些內容或執行的「業務規則的完整性 - 爲一個更好的詞想要的)可以強制回滾

感謝,

+0

如果您調用_two_存儲過程並且兩個調用都應該成功或兩者都應該失敗,會發生什麼? – Oded 2011-12-30 10:52:21

+0

如果您沒有使用相同的@@ trancount進入和退出存儲的procs,或者讓@@ trancount高於1然後回滾,那麼可能存在與交易管理有關的大問題。請參閱我的回答請 – gbn 2011-12-30 11:09:12

+0

感謝回覆偷窺。 – brumScouse 2012-01-12 12:40:12

回答

2

你可以有兩個級別的交易,如果每個被稱爲層意識到現有的交易

所以如果你期望存儲過程被重用,你可以使這個awar e從客戶端代碼開始的事務,另一個存儲過程,並且不執行任何開始/提交/回滾。

如果它沒有檢測到事務,則它可以自行開始/提交/回滾。

此行爲很重要,因爲SQL Server並沒有真正的嵌套或自動事務處理:所以使每個存儲過程安全並且不需要考慮它。

在我的答案模式在這裏會發現一個交易,正是這一點做的事:
Nested stored procedures containing TRY CATCH ROLLBACK pattern?

+0

非常感謝。一個明確的答案。 – brumScouse 2012-01-12 12:41:17

0

這是好做。如果您在覈心業務邏輯/服務之外使用存儲過程,您仍然可能希望讓它們的交易安全。如果您的存儲過程是一組操作的一部分,則它將成爲一個嵌套事務。

相關問題