首页 > 解决方案 > 将具有多个相关表的数据集批量插入 SQL Server C#

问题描述

我有一个包含多个表的数据集,源文档是一个 XML 文件。

mydataset.ReadXML(filename);

有多个具有多个关系的表。我有通过代码创建的 SQL 中的数据库 - 表、列和关系。

现在我想插入数据。(是的,我想要一切)。 编辑: SQL 表使用身份列自动生成 - 因为我不确定传入数据永远不会重复我想假设是唯一的参数之一。

那么考虑到我有外键约束,我应该采取什么方法来确保输入数据,我应该如何迭代数据集中的表以确保我不会尝试插入需要现有 id 的表中。我是创建一个硬编码映射(我也不喜欢),还是我遍历表寻找外键并验证父表等。

有任何想法吗 ?我相信以前有人这样做过,并且对我有一个简单的答案。

标签: c#sql-serverdatatableforeign-keysdataset

解决方案


你有几个选择。假设数据库没有生成键值,这很简单。任何一个

1)您发现加载表的顺序,以便每个带有外键的表在它所引用的表 之后加载。

2)您在SqlBulkCopy中关闭约束检查,然后在加载后选择检查约束。

要在加载后检查约束,请运行类似的命令

alter table SomeTable with check check constraint fk_SomeTable_OtherTable

如果您确实有数据库生成的密钥,这一切都更加困难。但解决这个问题的最佳方法是使用 SEQUENCE 对象而不是 IDENTITY 列并运行sp_sequence_get_range以将新的键范围获取到客户端并首先在其中应用键。


推荐阅读