sql server-SET TRANSACTION隔离级别READ未提交-是否需要显式使用事务开始和结束



下面的查询是否有效,或者我是否使用了显式事务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都将使用该隔离级别。如果您想将其限制在select stmt中的某些表中,请考虑使用NOLOCK提示

点击此处查看更多信息:WITH(NOLOCK)vs SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Begin事务和提交(没有END事务)仅适用于插入/更新/删除

顺便说一句,我会修改该查询,使用左外部联接而不是NOT IN来提高性能。

最新更新