我真的很惊讶该表有两个PK列。
当我尝试在另一列上添加PK时,那两个PK列正常更改,只有一列更改为PK。
以下是给出的脚本
ALTER TABLE [dbo].[ProductionPlaning] ADD CONSTRAINT [PK_ProductionPlaning] PRIMARY KEY CLUSTERED
(
[ProductionPlaningId] ASC,
[Date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
答案 0 :(得分:4)
根据定义,主键是唯一标识数据库表中记录的一个或多个字段。因此,同一个表不能有两个单独的主键。
如果您只是希望该字段是唯一的,只需通过向其添加唯一约束即可将其设为唯一字段ALTER TABLE YourTableNAme
ADD UNIQUE (Date);
如果您希望ProductionPlanningId和Date都是表格的唯一标识符;你制作一个复合主键:
ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED(column1, column2, etc.)
答案 1 :(得分:3)
创建脚本描述了这种情况。
ALTER TABLE [dbo].[ProductionPlaning] ADD CONSTRAINT [PK_ProductionPlaning] PRIMARY KEY CLUSTERED
(
[ProductionPlaningId] ASC,
[Date] ASC
)
如您所见,PK由两列(ProductionPlaningId
和Date
)创建,因此表中没有多个不同的PK。这是不可能的。
答案 2 :(得分:1)
表永远不会有多个主键。但是,主键可以包含多个列。在您的示例中,主键由多个列组成。
答案 3 :(得分:0)
主键定义为具有以下属性的一个或多个列:
其他集合称为候选主键。表格可以包含任意数量的候选人,您甚至可以将其声明为NOT NULL
和UNIQUE
。但是,“主键”中的主表示“一个”。
默认情况下,SQL Server实际上使用主键对数据页上的数据进行排序(这称为“群集”索引)。数据只存储一次,因此只能进行一次排序,进一步强调主键的唯一性。
那就是说,你的问题实际上是关于复合主键。这些是具有多个列的主键。通常,我避免使用复合主键,而是将合成标识列作为主键。但是,它们肯定是允许的,有时也很有用。