我有一個SQL Server存儲過程創建一個像這樣的交易:交易在存儲過程+客戶端代碼
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO Table1 ...
INSERT INTO Table2 ...
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
此存儲過程將插入到兩個獨立的表。如果其中一個失敗,它會回滾。
我也有一個創建事務範圍下面的.NET代碼:如果兩個我的存儲過程
using(var scope = new TransactionScope())
{
SqlCommand cmd1 = connection.CreateCommand();
SqlCommand cmd2 = connection.CreateCommand();
// ...
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
scope.Complete();
}
會發生什麼事,我的代碼創建一個交易?這是否會導致問題/需要成爲分佈式事務,或者只要我只創建一個到數據庫的連接就可以了?
存儲過程會將錯誤冒泡起來,而不是吞下它。我的例子並沒有表現出這種抱歉。 – Dismissile
@Dismissile - 您發現錯誤並回滾事務。在你的'CATCH'內沒有錯誤 – cjk
我的意思是我的例子沒有顯示我的RAISERROR,儘管我的真實情況是這樣做的。 – Dismissile