在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
解决方案: |
|
|
|
|
|