在SQL Server中插入具有冲突的记录

时间:2016-02-19 07:53:37

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我想将以下格式的5000条记录填充到特定的表格中。

Insert into @Table 
(c1,c2,c3,c4,c5)
Values 
(1,2,3,4,5),
(2,2,3,4,5),
(3,2,3,4,5),
(4,2,3,4,5),
(5,2,3,4,5)
....
....
Up to 1000 rows

当我尝试执行它时。我得到了外键违规。我知道原因,因为其中一个值在相应的父表中不存在。

导致此违规行为的记录很少。很难在1000行中找到那些被侵犯的行,所以我想至少将有效记录插入到我的目标表中,保留现在违反的行。

我不知道如何执行此操作。请建议我做任何想法。

2 个答案:

答案 0 :(得分:0)

禁用外键或修复数据。

查找错误数据很简单 - 您可以随时将其临时插入缓冲区表并运行查询以查找相关表中缺少的数据。

答案 1 :(得分:0)

如果这是一次性事情,那么您可以执行以下操作:

删除FK约束

ALTER TABLE MyTAble
  DROP CONSTRAINT FK_Contstraint
GO

执行INSERT

查找没有匹配父ID的记录。

SELECT * FROM MyTable MT WHERE NOT EXISTS (SELECT 1 FROM ParentTable PT WHERE MT.ParentId = PT.ID)

删除这些记录或用它们做其他事情。

重新创建FK约束。