【问题标题】:SQL Server: how to set default isolation level for the entire stored procedure?SQL Server:如何为整个存储过程设置默认隔离级别?
【发布时间】:2011-11-02 13:38:23
【问题描述】:

如果在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 sql-server tsql


    【解决方案1】:

    首先,SQL Server 中的默认隔离级别是 Read Committed,因此除非您更改了默认隔离级别,否则该语句不会真正执行任何操作。

    但是,一般来说,是的,SET Transaction Isolation Level 会改变整个过程的隔离级别(实际上是连接的持续时间)

    请记住,所有 SQL 语句都是隐式事务,这意味着,例如,如果更新失败 99%,它将自动回滚;不需要BEGIN TRAN/COMMIT

    要回答您的问题,是的,您的 SELECT 语句将继承您设置的隔离级别(如果您未设置,则为默认级别),除非您使用 WITH NOLOCK 之类的查询提示覆盖该行为,这将使单个查询表现得好像你做了SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多