如何强制重复键插入mssql

时间:2013-04-25 17:34:06

标签: sql sql-server sql-server-2008 tsql

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

P.S。我知道这通常不是一个好主意。因此,请提供有关如何完成此操作的建议,无论它有多疯狂。谢谢。

1 个答案:

答案 0 :(得分:0)

SQL Server主键必须是 唯一 NOT NULL 。因此,您看到重复数据的列不能成为其拥有的主键。正如urlreader建议的那样,它必须是具有一个或多个其他列的复合主键的一部分。

如何确定哪些列构成表的主键:在Enterprise Manager中,展开表,然后展开“列”。主键列将有一个"键"他们旁边的符号。你也会看到" 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