2017-02-21 30 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的好习惯。