在 READ COMMITTED 事务块中使用 (NOLOCK)

Cia*_*her 3 sql-server-2000 locking

我们使用的是 SQL Server 2000。

我想知道如果我们NOLOCKREAD COMMITTED事务块中使用提示会有什么风险,例如:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
BEGIN TRANSACTION
IF EXISTS(SELECT * FROM clients (NOLOCK) WHERE clientID = 23249)
    BEGIN
        PRINT 'TODO Update client'
    END
ELSE
    BEGIN
        PRINT 'TODO Insert client'
    END

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

我担心的是,尽管事务块具有隔离级别,但 NOLOCK 提示将允许进行 ditry 读取。

这可能吗?

PS:我知道关于为什么我首先使用锁定提示存在争议,但我只想知道这种情况下的风险是什么。

Mar*_*ith 5

该提示会覆盖连接的隔离级别,因此您确实会允许从客户端表中进行脏读。