我试图找出将记录插入单个表的最佳方法,但前提是该项目尚不存在。在这种情况下,KEY 是一个 NVARCHAR(400) 字段。对于这个例子,让我们假装它是牛津英语词典中的一个词的名字/在这里插入你最喜欢的词典。另外,我猜我需要将 Word 字段设置为主键。(该表也将有一个唯一标识符 PK 也)。
所以..我可能会得到这些我需要添加到表中的词...
例如。
- 猫
- 狗
- 富
- 酒吧
- 皮尤
- ETC...
所以传统上,我会尝试以下(伪代码)
SELECT WordID FROM Words WHERE Word = @Word
IF WordID IS NULL OR WordID <= 0
INSERT INTO Words VALUES (@Word)
IE。如果该词不存在,则插入它。
现在..我担心的问题是我们得到了很多点击..那么这个词是否有可能从另一个进程插入到 SELECT 和 INSERT 之间.. 然后会抛出一个约束错误? (即竞争条件)。
然后我认为我可能能够做到以下几点......
INSERT INTO Words (Word)
SELECT @Word
WHERE NOT EXISTS (SELECT WordID FROM Words WHERE Word = @Word)
基本上,当它不存在时插入一个单词。
抛开语法错误不谈,我不确定这是好是坏,因为它如何锁定表(如果确实如此),并且在表上的性能不高,以至于它获得大量读取和大量写入。
那么 - 你的 Sql 大师认为/做什么?
我希望有一个简单的插入并“捕获”任何抛出的错误。