只有在沒有插入行的情況下才插入行我一直使用類似于以下內(nèi)容的方法來實現(xiàn)這一目標(biāo):INSERT INTO TheTableSELECT
@primaryKey,
@value1,
@value2WHERE
NOT EXISTS
(SELECT
NULL
FROM
TheTable WHERE
PrimaryKey = @primaryKey).但一旦被加載,就會發(fā)生主密鑰違規(guī)事件.這是插入到此表中的唯一語句。那么,這是否意味著上述聲明不是原子的?問題是這幾乎是不可能隨意重建的。也許我可以將其修改為如下內(nèi)容:INSERT INTO TheTableWITH
(HOLDLOCK,
UPDLOCK,
ROWLOCK)SELECT
@primaryKey,
@value1,
@value2WHERE
NOT EXISTS
(SELECT
NULL
FROM
TheTable WITH
(HOLDLOCK,
UPDLOCK,
ROWLOCK)
WHERE
PrimaryKey = @primaryKey)不過,也許我用錯了鎖或者用了太多的鎖什么的。我在stackoverflow網(wǎng)站上看到了其他一些問題,其中的答案是“if(選擇count(*).插入”等),但我總是假設(shè)一個SQL語句是原子的(可能是不正確的)。有人有什么想法嗎?
只有在沒有插入行的情況下才插入行
慕慕森
2019-06-17 17:35:28