sql - 如果在 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)
)。
因为我真的在文档中找不到任何东西,所以要求确保我没有遗漏任何东西。
解决方案
想到的一种通用解决方案是暂时关闭外键约束,然后进行插入。然后,之后,您可以运行清理脚本/查询来删除或纠正指向不存在的父母的子记录。一旦您的数据处于良好状态,然后再次打开外键约束。
阅读如何使用 T-SQL 临时禁用外键约束?了解如何禁用/启用单个表的外键约束:
ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint -- disable
ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint -- enable
推荐阅读
- amazon-web-services - 如何使用 CloudFromation 更新单个 API 网关由多个服务组成
- pyspark - 如何在使用爆炸功能时重命名 Spark 数据框中的列
- oop - 多个对象引用相同的逻辑对象是否更有效,或者只是将每个逻辑对象作为其他对象的子对象?
- file - 在运行时加载资源文件
- excel - 根据今天的日期动态更新
- python - IndentationError: 在 def 中需要一个缩进块
- c - 使用 atoi 时返回值为 0
- sql - SQLite 中的 SQL OUTER JOIN 语句和子查询
- bash - 在 bash 脚本中使用 sed 和 jq
- python-3.x - 预测汽车价格的最佳特征