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

时间:2016-07-26 23:57:58

标签: sql-server tsql sql-server-2014 read-uncommitted

下面的查询是否有效,或者我是否使用显式事务处理并结束?

是的我知道未提交读取的危险

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() 

1 个答案:

答案 0 :(得分:2)

是的,这将有效但请注意它将在整个会话中生效。这意味着在该选择之后执行的任何SQL都将使用该隔离级别。如果要将其限制为select stmt中的某些表,请考虑使用NOLOCK提示

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

Begin事务和提交(没有END事务)仅适用于insert / updates / deletes

在旁注中我会修改该查询以使用左外连接而不是NOT IN来提高性能。