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不会. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


