2015-06-03 65 views
1

什麼是更好的地方來實現SQL事務?什麼是更好的地方來實現SQL事務?

  1. 在應用程序的業務邏輯或
  2. 在側的存儲過程?

在業務邏輯代碼中打開SQL事務是否是不好的做法?

當我們正在處理複雜的業務邏輯,如批處理?

請解釋一下,最好的方法是什麼?爲什麼?

+0

應該發佈此http://programmers.stackexchange.com/ –

+0

@BinkanSalaryman爲什麼?這是話題。 –

+0

交易應涵蓋應歸入事務性原子工作單元的任何操作。沒有通用的最佳實踐或單一答案,這取決於正在實施的邏輯以及應如何處理錯誤條件。 – David

回答

1

我的看法首先:在存儲過程。

在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 

然後你就可以放心地編寫業務邏輯。如果你願意,還可以在其他層面上進行交易。

+0

除非您想要在一個事務中運行兩個過程,或者執行ETL作業,或者您正在使用ORM。事實上,* not *捕獲異常實際上會回滾事務*並*終止會話。通過捕獲您允許其他代碼照常繼續。獨立的INSERT/DELETE語句無論如何都是原子的,所以它們不需要事務就可以使它們安全 –

1

在我看來,這取決於交易是否應覆蓋多次通話。如果事務應該完全通過一次對數據庫的調用完成,則可以選擇將事務保存在過程中。 (請注意,在SQL Server上通過ADO.NET運行一條語句時,它們已經打包在單個事務中)

如果您需要執行多個調用,使用相同的事務,可以將其拉到客戶端,或者創建一個爲您調用基礎程序的過程。

+0

我需要執行多個調用,並按照您的說明實施。感謝您的意見 – Rama

相關問題