2017-02-21 48 views
3

我想加入我的程序隔離級別和,我想確認哪一個是正確的格式從下面:存儲過程SQL Server的隔離級別?

嘗試#1 - 設置隔離級別調用存儲過程之前:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 

EXEC [sp_GetProductDetails] 'ABCD','2017-02-20T11:51:37.3178768' 

嘗試#2 - 設置存儲過程中的隔離級別:

CREATE PROCEDURE MySP AS 
BEGIN 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    BEGIN TRAN 
     SELECT * FROM MyTable 
     SELECT * FROM MyTable2 
     SELECT * FROM MyTable3 

     COMMIT TRAN 
END 

請建議。

回答

2

兩個版本都是「正確」的 - 他們只是做不同的事情

  • 你嘗試#1套該數據庫和連接的隔離級別 - 這意味着,所選擇的隔離級別將被使用爲今後的任何陳述 - 直到您更改隔離級別再次

  • 你嘗試#2套的隔離級別只有裏面的存儲過程 - 所以一旦存儲過程完成後,隔離級別EXI STED上的數據庫/連接水平再次恢復

所以這真的取決於你想要做什麼:

  • 設置一般隔離級別不同級別爲當前連接到這個數據庫?任何未來的語句都將在此隔離級別下運行 - >選擇#1

  • 將隔離級別設置爲不同的設置,僅用於單個存儲過程 - 不管連接/數據庫之前有什麼 - 然後使用#2

0

ISOLATION LEVEL READ COMMITTED是SQL數據庫的默認ISOLATION。

嘗試#2是設置ISOLATION LEVEL的好習慣。