我在一个窗口中编写多个SELECT语句,通常会根据需要突出显示并运行它们。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Table1
SELECT * FROM Table2
SELECT * FROM Table3
这是我的窗口可能是什么样子的示例,现在从这里我将仅突出显示SELECT * FROM Table2
并运行它。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
是否仍然适用,即使它没有用声明突出显示?
如果它仍然适用, 是如何做到的?
答案 0 :(得分:1)
忽略了为什么你不应该使用READ UNCOMMITTED
...
设置TRANSACTION ISOLATION LEVEL
适用于连接级别,直到断开连接或设置其他级别为止。
来自BOL:
设置TRANSACTION ISOLATION LEVEL(Transact-SQL) 控制由SQL Server连接发出的Transact-SQL语句的锁定和行版本控制行为。
因此,在SSMS查询窗口中运行一次将适用于您在该连接(窗口)内发送到服务器的所有批处理查询。
或者,您可以在语句中添加WITH (NOLOCK)
以应用于单个语句,例如
SELECT * FROM Table1;
SELECT * FROM Table2 WITH (NOLOCK);
SELECT * FROM Table3;
答案 1 :(得分:1)
不,如果您没有执行它,它将不适用于您的连接。正如Chris在上一个答案中提到的,一旦在连接中执行它(SSMS中的查询窗口),就会使用此事务隔离级别执行此连接中的所有后续查询。
如果您有疑问,可以立即检查用于连接的事务隔离级别:
DBCC USEROPTIONS