gpt4 book ai didi

sql - 如何忽略 SQL 中重复的主键?

转载 作者:行者123 更新时间:2023-12-01 13:49:46 30 4
gpt4 key购买 nike

我有一个包含多个值的 Excel 工作表,我将这些值导入到 SQL (book1$) 中,并且我想将这些值传输到 ProcessList 中。几行具有相同的主键,即 ProcessID,因为这些行包含原始值和修改后的值,我想保留这两个值。如何让 SQL 忽略重复的主键?

我尝试了 IGNORE_DUP_KEY = ON 但对于具有重复主键的行,只有 1 显示最新行。

CREATE TABLE dbo.ProcessList
(
Edited varchar(1),
ProcessId int NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON),
Name varchar(30) NOT NULL,
Amount smallmoney NOT NULL,
CreationDate datetime NOT NULL,
ModificationDate datetime
)

INSERT INTO ProcessList SELECT Edited, ProcessId, Name, Amount, CreationDate, ModificationDate FROM Book1$
SELECT * FROM ProcessList

另外,如果我有一行并且我更新了该行的值,有没有办法保留该行的原始值并在下面插入该行的克隆,并自动更新更新的值和创建/修改日期?

最佳答案

How do I make SQL ignore the duplicate primary keys?



在任何情况下都不能提交导致表包含具有相同主键的两个不同行的事务。这是主键本质的基础。 SQL Server 的 IGNORE_DUP_KEY选项不会改变这一点——它只会影响 SQL Server 处理问题的方式。 (打开该选项后,它会静默拒绝插入与任何现有行具有相同主键的行;否则,这种插入尝试会导致错误。)

您可以通过删除主键约束或通过向主键添加一列或多列以生成其集合值不重复的组合键来解决这种情况。不过,在您描述的那些中,我没有看到任何用于扩展 PK 的好的候选列。如果您删除 PK,那么添加一个合成的、自动生成的 PK 列可能是有意义的。

Also, if I have a row and I update the values of that row, is there any way to keep the original values of the row and insert a clone of that row below, with the updated values and creation/modification date updated automatically?



如果您想确保这会自动发生,但恰好有一行被更新,那么请查看触发器。如果您想要一种使其自动化的方法,但又愿意让用户要求该行为,那么请考虑使用存储过程。

关于sql - 如何忽略 SQL 中重复的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32857189/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com