什麼是更好的地方來實現SQL事務?什麼是更好的地方來實現SQL事務?
- 在應用程序的業務邏輯或
- 在側的存儲過程?
在業務邏輯代碼中打開SQL事務是否是不好的做法?
當我們正在處理複雜的業務邏輯,如批處理?
請解釋一下,最好的方法是什麼?爲什麼?
什麼是更好的地方來實現SQL事務?什麼是更好的地方來實現SQL事務?
在業務邏輯代碼中打開SQL事務是否是不好的做法?
當我們正在處理複雜的業務邏輯,如批處理?
請解釋一下,最好的方法是什麼?爲什麼?
我的看法首先:在存儲過程。
在SP非常簡單的使用事務,例如(MS SQL 2008 R2)
CREATE PROCEDURE P_MyProcedure
AS
BEGIN
BEGIN TRANSACTION
BEGIN TRY
select 'Do someting here'
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION;
END
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END
然後你就可以放心地編寫業務邏輯。如果你願意,還可以在其他層面上進行交易。
除非您想要在一個事務中運行兩個過程,或者執行ETL作業,或者您正在使用ORM。事實上,* not *捕獲異常實際上會回滾事務*並*終止會話。通過捕獲您允許其他代碼照常繼續。獨立的INSERT/DELETE語句無論如何都是原子的,所以它們不需要事務就可以使它們安全 –
在我看來,這取決於交易是否應覆蓋多次通話。如果事務應該完全通過一次對數據庫的調用完成,則可以選擇將事務保存在過程中。 (請注意,在SQL Server上通過ADO.NET運行一條語句時,它們已經打包在單個事務中)
如果您需要執行多個調用,使用相同的事務,可以將其拉到客戶端,或者創建一個爲您調用基礎程序的過程。
我需要執行多個調用,並按照您的說明實施。感謝您的意見 – Rama
應該發佈此http://programmers.stackexchange.com/ –
@BinkanSalaryman爲什麼?這是話題。 –
交易應涵蓋應歸入事務性原子工作單元的任何操作。沒有通用的最佳實踐或單一答案,這取決於正在實施的邏輯以及應如何處理錯誤條件。 – David