gpt4 book ai didi

c# - SET TRANSACTION ISOLATION LEVEL 仅适用于交易?

转载 作者:行者123 更新时间:2023-11-30 20:33:39 25 4
gpt4 key购买 nike

official example here我们将 SET TRANSACTION ISOLATION LEVEL 与明确定义的事务结合使用。

我的问题是,如果我从 SqlCommand 执行查询,例如:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * from MyTable

我会从我设置的新隔离级别中受益吗?

或者我是否需要明确定义这样的交易?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN TRANSACTION;
SELECT * from MyTable
COMMIT TRANSACTION;

更新:根据 Randy Levy's answer ,我将更新我的查询如下:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * from MyTable;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

这是为了克服possible isolation level leaks when using pooling .

最佳答案

是的,即使不在显式 BEGIN TRANSACTION 中,您也会受益于您设置的事务隔离级别。当您设置事务隔离级别时,它是在连接级别上设置的。

来自 SET TRANSACTION ISOLATION LEVEL (Transact-SQL) :

Only one of the isolation level options can be set at a time, and it remains set for that connection until it is explicitly changed.

可能发生的一个“陷阱”(问题)是在使用池时隔离级别可能会在不同连接之间泄漏。如果您在一个(或某些)特定代码段中显式设置隔离级别(但在大多数其他地方使用默认设置)并且还使用连接池。如果代码期望默认隔离级别“A”但获得的连接将隔离级别显式设置为“B”,这可能会导致奇怪的问题。

似乎这个问题现在已在更高版本的 SQL Server 中修复:SQL Server: Isolation level leaks across pooled connections

关于c# - SET TRANSACTION ISOLATION LEVEL 仅适用于交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com