0

我知道这听起来很疯狂(如果我设计数据库我会做不同的)但我实际上想在插入时强制使用重复键。我正在使用一个数据库,该数据库旨在将列作为“非空”pk 的列,每行的值都相同。我正在使用的记录保存软件能够以某种方式将其每条记录的副本插入到这些列中。我需要将另一个表中的列中的数据复制到该表中的一列中。通常我只是尝试只插入该列,但是 pk 设置为“非空”,所以我必须在其中放入一些东西,并且表格的设置方式对于每条记录都必须是相同的东西. 这应该是不可能的,但是制作记录保存软件的公司让它以某种方式工作。

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

4

1 回答 1

0

SQL Server 主键必须是唯一的并且不是 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

于 2013-04-25T23:05:21.250 回答