Sql server 设置事务隔离级别READ uncommitted-是否需要显式使用事务开始和结束?
下面的查询是否有效,或者我是否已显式使用事务being和end 是的,我知道未承诺阅读的危险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
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(连接)为止已关闭或隔离级别已显式重置/更改为其他级别。