如果紧接着 BEGIN
我有 SET TRANSACTION ISOLATION LEVEL ...
声明,无论我使用的是,存储过程的整个范围内的给定事务级别是否有效 BEGIN TRANSACTION
或不?即如果我有简单 SELECT
根据定义原子/事务处理的语句,它们的默认事务级别是否设置为给定的?
BEGIN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
-- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED
SELECT * FROM T
END
首先,SQL Server中的默认隔离级别是Read Committed,因此除非您更改了默认隔离级别,否则该语句实际上不会执行任何操作。
但是,通常,是的,SET事务隔离级别将改变整个过程的隔离级别(实际上是连接的持续时间)
请记住,所有SQL语句都是隐式事务,这意味着,例如,如果更新失败99%,它将自动回滚;没有 BEGIN TRAN/COMMIT
是必要的。
要回答您的问题,是的,您的SELECT语句将继承您设置的隔离级别(如果您没有设置默认值,则为默认值),除非您使用查询提示覆盖行为 WITH NOLOCK
这将使单个查询的行为就像您所做的那样 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
首先,SQL Server中的默认隔离级别是Read Committed,因此除非您更改了默认隔离级别,否则该语句实际上不会执行任何操作。
但是,通常,是的,SET事务隔离级别将改变整个过程的隔离级别(实际上是连接的持续时间)
请记住,所有SQL语句都是隐式事务,这意味着,例如,如果更新失败99%,它将自动回滚;没有 BEGIN TRAN/COMMIT
是必要的。
要回答您的问题,是的,您的SELECT语句将继承您设置的隔离级别(如果您没有设置默认值,则为默认值),除非您使用查询提示覆盖行为 WITH NOLOCK
这将使单个查询的行为就像您所做的那样 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED