在具有标识列的表中插入 select from

Posted

技术标签:

【中文标题】在具有标识列的表中插入 select from【英文标题】:insert into select from in a table with identity column 【发布时间】:2010-03-16 13:39:08 【问题描述】:

我正在使用 insert into select from 语句将查询的结果集插入到包含标识列的表中。 我一直收到错误 无法在具有唯一索引“IX_TABLE1”的对象“dbo.TABLE1”中插入重复的键行。

请帮忙

【问题讨论】:

【参考方案1】:

对于 MSSQL,请使用 WHERE NOT EXISTS

INSERT INTO tbl1 (keycol, col1, col2)
SELECT keycol, col1, col2
FROM tbl2
WHERE NOT EXISTS
(SELECT 1
FROM tbl1
WHERE tbl1.keycol = tbl2.keycol);

对于 mysql 使用 INSERT IGNORE

INSERT IGNORE INTO table 
SELECT x, y, z 
FROM table2 
WHERE a=b

这将跳过任何重复键错误,只插入不与现有唯一键/主键冲突的行。

【讨论】:

【参考方案2】:

您正在使用的 select 语句正在检索具有重复值的行,这些重复值在插入到您的表中时会触发您的约束。

您可以通过插入数据的唯一索引来验证列名。获得该列后,尝试在您的选择语句中检查该列映射到哪个列并检查重复记录。尽管您可能有一个标识列,但您的插入表仍然包含与另一列链接的约束,以防止重复记录。

【讨论】:

【参考方案3】:

所有这些错误意味着您正在尝试将一个已经存在的值插入到表中。如果您提供更多信息,我可以尝试提供帮助,但您没有提供很多信息。

【讨论】:

以上是关于在具有标识列的表中插入 select from的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer系统变量使用

SqlServer标识列

如何捕获插入到包含标识列的 Redshift 表中的行数?

SQL Server中的标识列

使用 C# 出现错误“无法在表中插入标识列的显式值”

SQLSERVER 标识列