只有在没有插入行的情况下才插入行
我一直使用类似于以下内容的方法来实现这一目标:INSERT INTO TheTableSELECT
@primaryKey,
@value1,
@value2WHERE
NOT EXISTS
(SELECT
NULL
FROM
TheTable WHERE
PrimaryKey = @primaryKey)
.但一旦被加载,就会发生主密钥违规事件.这是插入到此表中的唯一语句。那么,这是否意味着上述声明不是原子的?
问题是这几乎是不可能随意重建的。
也许我可以将其修改为如下内容:INSERT INTO TheTableWITH
(HOLDLOCK,
UPDLOCK,
ROWLOCK)SELECT
@primaryKey,
@value1,
@value2WHERE
NOT EXISTS
(SELECT
NULL
FROM
TheTable WITH
(HOLDLOCK,
UPDLOCK,
ROWLOCK)
WHERE
PrimaryKey = @primaryKey)
不过,也许我用错了锁或者用了太多的锁什么的。
我在stackoverflow网站上看到了其他一些问题,其中的答案是“if(选择count(*).插入”等),但我总是假设一个SQL语句是原子的(可能是不正确的)。
有人有什么想法吗?