sql-server – SQL Server ROWLOCK over SELECT假如不存在INSERT
我已经从SQL Server 2005进级到2008.我记得在2005年,ROWLOCK基础无法事变,我不得不行使PAGELOCK或XLOCK来实现任何范例的现实锁定.我知道读者会问“你做错了什么?”没有.我最终证明我可以编辑一个“ROWLOCKED”行,但假如我进级锁定级别则不可.我没有机遇看到它是否合用于SQL 2008.我的第一个题目是有没有人在2008年碰着过这个题目? 我的第二个题目如下.我想测试一个值是否存在,假如存在,则对相干列执行更新,而不是整行的插入.这意味着假如找到该行,则必要将其锁定,由于维护进程也许会在历程中删除此行,从而导致错误. 为了声名道理,以下代码是否有用? BEGIN TRAN SELECT ProfileID FROM dbo.UseSessions WITH (ROWLOCK) WHERE (ProfileID = @ProfileID) OPTION (OPTIMIZE FOR (@ProfileID UNKNOWN)) if @@ROWCOUNT = 0 begin INSERT INTO dbo.UserSessions (ProfileID,SessionID) VALUES (@ProfileID,@SessionID) end else begin UPDATE dbo.UserSessions SET SessionID = @SessionID,Created = GETDATE() WHERE (ProfileID = @ProfileID) end COMMIT TRAN 办理要领一个表明…> ROWLOCK / PAGELOCK是粒度 粒度和断绝级别和模式是正交的. >粒度=锁定的内容=行,页,表(PAGLOCK,ROWLOCK,TABLOCK) XLOCK可以按照必要独有锁定行. ROWLOCK / PAGELOCK不会. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |