1 performance sql-server transaction isolation-level query-performance
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 位于“BEGIN”的不同部分。以下两个查询的行为是否相同?
视图 viewOne 和 viewTwo 会继承脏读吗?或者视图需要有一个明确的“NOLOCK”
查询 1
set transaction isolation level read uncommitted
begin
select col1 from viewOne
select * from viewTwo
select * from table1
end
Run Code Online (Sandbox Code Playgroud)
查询 2
begin
set transaction isolation level read uncommitted
select col1 from viewOne
select * from viewTwo
select * from table1
end
Run Code Online (Sandbox Code Playgroud)
从这个文档 - SET TRANSACTION ISOLATION LEVEL - 在 REMARKS 下
一次只能设置一个隔离级别选项,并且它会一直为该连接设置,直到它被显式更改。除非语句的 FROM 子句中的表提示为表指定了不同的锁定或版本控制行为,否则在事务中执行的所有读取操作都在指定隔离级别的规则下运行。
您可以使用此查询来确定您当前所处的隔离级别:
SELECT CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncommitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL
FROM sys.dm_exec_sessions
where session_id = @@SPID
Run Code Online (Sandbox Code Playgroud)