小编典典

SQL Server:如何为整个存储过程设置默认隔离级别?

sql

如果之后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

阅读 433

收藏
2021-04-22

共1个答案

小编典典

首先,SQL Server中的默认隔离级别为Read Committed,因此该语句实际上不会做任何事情,除非您更改了默认隔离级别。

但是,总的来说,是的,SET事务隔离级别将更改整个过程的隔离级别(实际上是连接的持续时间)

请记住,所有SQL语句都是隐式事务,这意味着,例如,如果某个更新未能通过99%,它将自动回滚;否则,它将自动回滚。没有BEGIN TRAN/COMMIT必要。

要回答您的问题,是的,除非您用查询提示覆盖行为,否则SELECT语句将继承您设置的隔离级别(如果未设置,则为默认值),例如WITH NOLOCK,它将使单个查询的行为像您所做的那样SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

2021-04-22