2013-04-25 63 views
0

我知道这听起来很疯狂(如果我设计数据库我会做不同),但我实际上想强制插入一个重复键。我正在处理一个数据库,该数据库被设计为将列设置为'not null'pk,它们对于每一行都具有相同的值。我正在使用的记录保存软件以某种方式可以将dups插入到每个记录的这些列中。我需要将数据从另一个表中的列复制到这一列中的一列中。通常我只会尝试插入到那个列中,但是pk被设置为'not null',所以我必须在其中放入一些东西,并且表的设置方式是每个记录必须有相同的东西。这应该是不可能的,但是制作记录保存软件的公司使它工作了一些。我想知道如果有人知道如何做到这一点?如何强制重复键插入mssql

P.S.我知道这通常不是一个好主意。所以请仅仅包括如何做到这一点的建议,无论它是多么疯狂。谢谢。

+4

取下PK /唯一约束。 – 2013-04-25 17:35:34

+3

请发布该表的创建脚本以及所谓的重复数据的子集。 – Quassnoi 2013-04-25 17:37:41

+1

是否有可能主键实际上是该列和另一列的组合? – urlreader 2013-04-25 18:27:28

回答

0

一个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