SQL Server 2012,组合主键需要是唯一的吗?

时间:2017-03-15 11:05:22

标签: sql sql-server sql-server-2012

您好我有一个问题,我主要假设SQL服务器功能。我正在构建一个测试数据库,当我尝试将数据插入到我的表中时,我遇到了一个问题。

图1显示了尝试添加行时出现的错误消息。 https://i.stack.imgur.com/GW3C2.png

图2显示了数据库中的所有关系 //i.stack.imgur.com/7BhHa.png

图3显示了我目前正在尝试更新的表格 //i.stack.imgur.com/3JqtA.png

在表格中我有一个组合的主键(" SDat"和" Kurs")我得到的错误信息表明主键必须是唯一的,但是不明白的是我有第三栏" Elev"这使行unqe,为什么不会SQL服务器我将此行插入表?我已经尝试在Acess中创建相同的数据库并且它可以工作,所以我认为问题是SQL服务器中的东西

关心罗伯特

1 个答案:

答案 0 :(得分:0)

主键的定义意味着该值必须是唯一的。因此,如果您在2个字段上有一个组合主键,那么这两个字段上的值必须是唯一的,这意味着它只能有1行。如果您需要对3个字段(SDat,Kurs和Elev)的组合强制执行唯一值,那么您的PK需要包含所有3个字段。

如果你真的需要在表中的很多字段中强制执行唯一约束,我不会使用PK来强制执行,而是使用UNIQUE约束。

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (column1, ..., columnn)

然后,您可以为主键创建不同的列,以便在添加列时需要将这些其他列设置为唯一,您不必编辑PK并重建表。