将具有多个相关表的数据集大容量插入SQL Server C#

将具有多个相关表的数据集大容量插入SQL Server C#,c#,sql-server,datatable,foreign-keys,dataset,C#,Sql Server,Datatable,Foreign Keys,Dataset,我有一个包含多个表的数据集,源文档是一个XML文件 mydataset.ReadXML(文件名) 存在具有多个关系的多个表。我通过代码表、列和关系在SQL中创建了数据库 现在我想插入数据。(是的,我什么都想要)。 编辑:SQL表使用自动生成的标识列,因为我不确定传入的数据是否永远不会重复我想假设的唯一参数之一 那么,考虑到我有外键约束,我应该采取什么方法来确保输入数据,我应该如何迭代数据集中的表以确保我不尝试插入需要现有id的表。我是否创建硬编码映射(我不太喜欢),或者我在表中查找外键并验证父表

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

mydataset.ReadXML(文件名)

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

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

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


有什么想法吗?我确信有人以前做过这件事,并为我提供了一个简单的答案。

您有两个选择。假设数据库不生成键值,这相当简单。或者

1) 您将发现加载表的顺序,以便每个具有外键的表都在其引用的表之后加载

2) 关闭约束检入,然后可以选择在加载后检查约束

要在加载后检查约束,请运行以下命令

alter table SomeTable with check check constraint fk_SomeTable_OtherTable

如果您确实有数据库生成的密钥,这就更难了。但是解决这个问题的最好方法是使用SEQUENCE对象来代替IDENTITY列并运行以获取新的键范围到客户端,然后首先在那里应用键

SQL server正在生成新的标识列—因为我不知道传入的作业数据在xml文件中是否会有无法保证的重复信息,我不想因为重复的信息可能已经存在一年甚至一周了而终止进程。我正在考虑可能尝试使用dataset.CreateReader()在表格上,然后尝试以某种方式更新数据库-但我需要研究它-甚至可能翻译来尝试它-只需要先做一些研究我寻找简单的和可重用的..有什么想法吗?我不认为这有什么帮助。SqlBulkCopy和SqlDataAdapter都已经知道如何更新数据库。