首页 > 解决方案 > 如果在 sql server 2008 R2 中的外键冲突,插入新记录并跳过

问题描述

我在多值语句中遇到类似于此 SQL Server 外键冲突的问题?但是,在 sql server 2008 中。

当我从 csv 文件中读取数据时,父级中已经不存在一些 id,因此返回此错误:

INSERT 语句与 FOREIGN KEY 约束冲突

请问有没有类似 MySQL 的方法insert ignore。这样我就可以简单地跳过有问题的数据。

我接受除了使用新临时表创建存储过程之外没有其他方法(先插入没有外键的表,然后使用 重新插入where foreign_id exists in (select id from parent))。

因为我真的在文档中找不到任何东西,所以要求确保我没有遗漏任何东西。

标签: sqlsql-server-2008

解决方案


想到的一种通用解决方案是暂时关闭外键约束,然后进行插入。然后,之后,您可以运行清理脚本/查询来删除或纠正指向不存在的父母的子记录。一旦您的数据处于良好状态,然后再次打开外键约束。

阅读如何使用 T-SQL 临时禁用外键约束?了解如何禁用/启用单个表的外键约束:

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint            -- disable
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint   -- enable

推荐阅读