一个SQL Server主键必须是独特和NOT NULL。因此,您看到重复数据的列不能成为自己的主键。正如urlreader所建议的,它必须是包含一个或多个其他列的复合主键的一部分。
如何确定组成表的主键:在企业管理器中,展开表,然后展开“列”。主键列旁边会有一个“关键”符号。您还会看到“PK”之列描述后,像这样:
MyFirstIDColumn (PK, int, not null)
MySecondIDColumn (PK, int, not null)
一旦你知道哪些列构成主键,只需确保您插入唯一的数据组合成列。所以,对于我上面的示例表,这将是:
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --SUCCEED
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,2) --SUCCEED
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,1) --FAIL because of duplicate (1,1)
INSERT INTO MyTable (MyFirstIDColumn, MySecondIDColumn) VALUES (1,3) --SUCCEED
更多关于主键:
http://msdn.microsoft.com/en-us/library/ms191236%28v=sql.105%29.aspx
取下PK /唯一约束。 – 2013-04-25 17:35:34
请发布该表的创建脚本以及所谓的重复数据的子集。 – Quassnoi 2013-04-25 17:37:41
是否有可能主键实际上是该列和另一列的组合? – urlreader 2013-04-25 18:27:28