我想在我的程序中添加隔离级别,为此我想从下面确认哪一个是正确的格式:
尝试#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
请建议。
答案 0 :(得分:4)
两个版本都是“正确的” - 他们只是做不同的事情:
您的尝试#1设置了该数据库和连接的隔离级别 - 这意味着,所选隔离级别将用于任何将来的语句 - 直到您再次更改隔离级别
您的尝试#2将隔离级别设置为仅存储在存储过程中 - 因此,一旦存储过程完成,将再次恢复数据库/连接级别上存在的隔离级别< / p>
所以这真的取决于你想做什么:
将当前与此数据库的连接的隔离级别设置为 的不同级别?任何未来的声明都将在此隔离级别下运行 - &gt;选择#1
将隔离级别设置为仅针对单个存储过程的不同设置 - 无论之前连接/数据库具有什么 - 然后使用#2
答案 1 :(得分:0)
ISOLATION LEVEL READ COMMITTED
是SQL数据库的默认ISOLATION。
尝试#2 是设置ISOLATION LEVEL
的好习惯。