存储过程SQL Server的隔离级别?

时间:2017-02-21 06:31:42

标签: stored-procedures sql-server-2012 isolation-level

我想在我的程序中添加隔离级别,为此我想从下面确认哪一个是正确的格式:

尝试#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 个答案:

答案 0 :(得分:4)

两个版本都是“正确的” - 他们只是做不同的事情

  • 您的尝试#1设置了该数据库和连接的隔离级别 - 这意味着,所选隔离级别将用于任何将来的语句 - 直到您再次更改隔离级别

  • 您的尝试#2将隔离级别设置为仅存储在存储过程中 - 因此,一旦存储过程完成,将再次恢复数据库/连接级别上存在的隔离级别< / p>

所以这真的取决于你想做什么:

  • 将当前与此数据库的连接的隔离级别设置为 的不同级别?任何未来的声明都将在此隔离级别下运行 - &gt;选择#1

  • 将隔离级别设置为仅针对单个存储过程的不同设置 - 无论之前连接/数据库具有什么 - 然后使用#2

答案 1 :(得分:0)

ISOLATION LEVEL READ COMMITTED是SQL数据库的默认ISOLATION。

尝试#2 是设置ISOLATION LEVEL的好习惯。