SQL是否有办法强制执行唯一的列值,这些值不是另一个表的主键?
例如,假设我TblDog
有字段:
DogId
- Primary Key
DogTag
- Integer
DogNumber
- varchar
DogTag
和DogNumber
字段必须是唯一的,但不会链接到任何类型的表格。
我能想到的唯一方法是在创建或编辑之前拉出与DogTag
匹配的任何记录并拉出与DogNumber
匹配的任何记录(不包括当前正在更新的记录)。这是两个在创建/编辑记录之前调用数据库。
我的问题是:有没有办法设置SQL以强制这些值是唯一的,而不将它们设置为键,或者在Entity Frameworks
中(不过度调用数据库) )?
我知道我可以将两个调用合二为一,但我需要能够准确地告知用户哪个字段已被复制(或两者都有)。
编辑:数据库是SQL Server 2008 R2。
答案 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)