回答

收藏

在MS-SQL中防止条件INSERT / UPDATE竞争条件

技术问答 技术问答 275 人阅读 | 0 人回复 | 2023-09-12

我想知道我是否遵循正确的方法,需要你的帮助才能弄清楚
" ~4 {* g, ]# H- o* ]这是我不受保护的查询
8 z+ w( e  \* B  KDECLARE @cl_WordId bigint = NULLSELECT  @cl_WordId = cl_WordIdFROM tblWordsWHERE cl_Word = @cl_WordAND cl_WordLangCode = @cl_WordLangCodeIF (@cl_WordId IS NULL)BEGIN  INSERT INTO tblWords (cl_Word,cl_WordLangCode,cl_SourceId)    VALUES (@cl_Word,@cl_WordLangCode,@cl_SourceId)  SET @cl_WordId = SCOPE_IDENTITY()  SELECT    @cl_WordIdENDELSEBEGIN  SELECT    @cl_WordIdEND为了保护它,我将其修改如下) m0 \2 L" ~0 Y4 ]; x
DECLARE @cl_WordId bigint = NULLSELECT  @cl_WordId = cl_WordIdFROM tblWords WITH (HOLDLOCK)WHERE cl_Word = @cl_WordAND cl_WordLangCode = @cl_WordLangCodeBEGIN  IF (@cl_WordId IS NULL)  BEGIN    INSERT INTO tblWords (cl_Word,cl_WordLangCode,cl_SourceId)      VALUES (@cl_Word,@cl_WordLangCode,@cl_SourceId)    SET @cl_WordId = SCOPE_IDENTITY()    SELECT      @cl_WordId  END  ELSE  BEGIN    SELECT      @cl_WordId  ENDEND所以,我已经加了WITH (HOLDLOCK)到选择查询并添加begin与end该选择查询
. B% L! K3 B* J  {这种方法是否正确,防止有条件INSERT / UPDATE竞争条件/ e) O! a/ b/ a+ ?& |& G- F
                                                                  j3 b3 ]5 Z) g- G, p# g0 W, B
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则