Sql server 设置事务隔离级别READ uncommitted-是否需要显式使用事务开始和结束?

Sql server 设置事务隔离级别READ uncommitted-是否需要显式使用事务开始和结束?,sql-server,tsql,sql-server-2014,read-uncommitted,Sql Server,Tsql,Sql Server 2014,Read Uncommitted,下面的查询是否有效,或者我是否已显式使用事务being和end 是的,我知道未承诺阅读的危险 SET TRANSACTION isolation level READ uncommitted SELECT TOP 100 tblguilds.guild_id, tblguilds.guildname, tblguilds.leaderuserid, tblusersprofile.username

下面的查询是否有效,或者我是否已显式使用事务being和end

是的,我知道未承诺阅读的危险

SET TRANSACTION isolation level READ uncommitted 

SELECT TOP 100 tblguilds.guild_id, 
               tblguilds.guildname, 
               tblguilds.leaderuserid, 
               tblusersprofile.username 
FROM   tblguilds 
       LEFT JOIN tblusersprofile 
              ON tblusersprofile.userid = tblguilds.leaderuserid 
WHERE  tblguilds.guild_id NOT IN (SELECT guildcode 
                                  FROM   tblguildapplied 
                                  WHERE  userid = 1) 
ORDER  BY Newid() 

是的,这将起作用,但请注意,它将在整个课程中有效。这意味着在选择之后执行的任何SQL都将使用该隔离级别。如果您想将其限制在选择STMT中的某些表中,则考虑使用NoLoCK提示< /P> 更多信息请参见此处:

开始事务和提交(没有结束事务)仅适用于插入/更新/删除


另一方面,为了提高性能,我将修改该查询以使用左外部联接,而不是NOT IN

是的,这将起作用,但请注意,它将在整个会话中生效。这意味着在选择之后执行的任何SQL都将使用该隔离级别。如果您想将其限制在选择STMT中的某些表中,则考虑使用NoLoCK提示< /P> 更多信息请参见此处:

开始事务和提交(没有结束事务)仅适用于插入/更新/删除


另一方面,为了提高性能,我将修改该查询以使用左外部联接,而不是NOT IN

我的理解是,事务的开始/结束选择不做任何事情。与更新/插入一起选择确实有作用,但仅在“开始/结束”内选择没有意义。也许有人可以证实这一点。我的理解是,事务的开始/结束并不做任何事情。与更新/插入一起选择确实有作用,但仅在“开始/结束”内选择没有意义。也许有人可以证实这一点。所以我们可以说每个连接=每个会话对吗?@MonsterMMORPG是的,但从技术上讲,准确地说,在执行“设置隔离级别…”命令的同一SPID中运行的所有内容都将保持有效,直到该SPID(连接)为止关闭或隔离级别被显式重置/更改为其他内容。因此,我们可以说每个连接=每个会话对吗?@MonsterMMORPG是的,但从技术上讲,在执行“设置隔离级别…”命令的同一SPID中运行的所有内容都将保持有效,直到该SPID(连接)为止已关闭或隔离级别已显式重置/更改为其他级别。