在SQL中检查重复的列值(不是键)

时间:2012-07-09 15:35:43

标签: c# sql entity-framework

SQL是否有办法强制执行唯一的列值,这些值不是另一个表的主键?

例如,假设我TblDog有字段:

  1. DogId - Primary Key
  2. DogTag - Integer
  3. DogNumber - varchar
  4. DogTagDogNumber字段必须是唯一的,但不会链接到任何类型的表格。

    我能想到的唯一方法是在创建或编辑之前拉出与DogTag匹配的任何记录并拉出与DogNumber匹配的任何记录(不包括当前正在更新的记录)。这是两个在创建/编辑记录之前调用数据库。

    我的问题是:有没有办法设置SQL以强制这些值是唯一的,而不将它们设置为键,或者在Entity Frameworks中(不过度调用数据库) )?

    我知道我可以将两个调用合二为一,但我需要能够准确地告知用户哪个字段已被复制(或两者都有)。

    编辑:数据库是SQL Server 2008 R2。

5 个答案:

答案 0 :(得分:4)

正如MilkywayJoe所建议的那样,在SQL数据库中使用唯一的键约束。在插入+更新期间检查这些。

ALTER TABLE TblDog ADD CONSTRAINT U_DogTag UNIQUE(DogTag)

AND

ALTER TABLE TblDog ADD CONSTRAINT U_DogNumber UNIQUE(DogNumber)

答案 1 :(得分:3)

我建议设置unique constraints / indexes以防止重复输入。

答案 2 :(得分:1)

ALTER TABLE TblDog ADD CONSTRAINT U_DogTag UNIQUE(DogTag)

答案 3 :(得分:0)

它似乎并不像实体框架那样支持它,but was on the cards。看起来您需要使用Unique Constraints as mentioned in the comments直接在数据库中执行此操作。

答案 4 :(得分:0)

CREATE UNIQUE INDEX idxUniqueDog ON TblDog (DogTag, DogNUmber)