主键复制异常

时间:2012-06-19 18:31:17

标签: c# sql sql-server c#-4.0 exception-handling

我正在使用sql server作为数据库在C#中开发一个项目。所以问题是我的项目中有一个算法,每次返回一个值;保存到数据库中(作为我的项目要求)。如果算法重复一个值,那也将保存到不需要的数据库(复制)并导致一些问题。我需要帮助来克服一个唯一值在它发生时只保存一次的问题;数据库中没有重复。我试图将该列作为主键,但后来发现主键违规异常。

1 个答案:

答案 0 :(得分:4)

只需在线或存储过程中使用EXISTS查询

您的查询程序可以检查该行是否已存在

编辑:啊哈抱歉忘记了,那将是愚蠢的: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)
相关问题