我正在使用 sql server 作为数据库的 C# 项目。所以问题是我的项目中有一个算法每次都返回一个值;保存到数据库中(作为我的项目要求)。如果算法重复一个值,那也会保存到不需要的数据库(重复)并导致一些问题。我需要帮助来克服唯一值在发生时只保存一次的问题;数据库中没有重复。我试图使该列成为主键,但后来我发现主键违规异常。
问问题
2103 次
1 回答
4
只需在线或在存储过程中使用 EXISTS 查询
您的查询过程可以检查该行是否已存在
编辑:啊哈抱歉忘了NOT,那太愚蠢了:D
IF NOT EXISTS(SELECT UniqueValue FROM UniqueValuesTable WHERE UniqueValue = @NewValue)
INSERT INTO UniqueValuesTable VALUES (@NewValue)
编辑:这是一个 SQL 小提琴来展示它的工作原理
http://sqlfiddle.com/#!3/b87f9/3
正如 dems 指出的那样,该操作不是原子的,因此在多会话情况下仍然可能存在 PK 违规
替代方案是:
INSERT INTO UniqueValuesTable SELECT @NewValue WHERE NOT EXISTS (SELECT UniqueValue FROM UniqueValuesTable WHERE UniqueValue = @NewValue)
于 2012-06-19T18:39:59.500 回答