存储过程的隔离级别 SQL 服务器?
Isolation Level for stored procedure 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
求推荐。
两个版本都是 "correct" - 它们只是做 不同的事情:
您的第 1 次尝试设置了该数据库和连接的隔离级别 - 这意味着,所选隔离级别将用于任何未来的语句 - 直到您再次更改隔离级别
您的尝试#2 设置了隔离级别仅在存储过程内部 - 因此一旦存储过程完成,存在于database/connection等级再次恢复
所以这真的取决于你想做什么:
将隔离级别设置为不同的级别通常 您当前与此数据库的连接?以后的任何语句都将在此隔离级别下 运行 --> 选择 #1
只为单个存储过程将隔离级别设置为不同的设置 - 不管 connnection/database 之前有什么 - 然后使用 #2
ISOLATION LEVEL READ COMMITTED
是 SQL 数据库的默认隔离。
尝试 #2 是设置 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
求推荐。
两个版本都是 "correct" - 它们只是做 不同的事情:
您的第 1 次尝试设置了该数据库和连接的隔离级别 - 这意味着,所选隔离级别将用于任何未来的语句 - 直到您再次更改隔离级别
您的尝试#2 设置了隔离级别仅在存储过程内部 - 因此一旦存储过程完成,存在于database/connection等级再次恢复
所以这真的取决于你想做什么:
将隔离级别设置为不同的级别通常 您当前与此数据库的连接?以后的任何语句都将在此隔离级别下 运行 --> 选择 #1
只为单个存储过程将隔离级别设置为不同的设置 - 不管 connnection/database 之前有什么 - 然后使用 #2
ISOLATION LEVEL READ COMMITTED
是 SQL 数据库的默认隔离。
尝试 #2 是设置 ISOLATION LEVEL
.