我有一个包含多个表的DataSet,源文档是XML文件。
mydataset.ReadXML(filename);
有多个具有多个关系的表。我有通过代码在SQL中创建的数据库-表,列和关系。
现在我想插入数据。 (是的,我想要一切)。 编辑: SQL表使用“身份列”自动生成-因为我不确定传入的数据将不会重复我想假设的唯一参数之一。
那么考虑到我有外键约束,我应该怎么做才能确保输入数据,应该如何迭代数据集中的表以确保我不尝试插入需要现有ID的表中。我应该创建一个硬编码的地图(我也不太喜欢),还是在表中查找外键并验证父表等?
有什么想法吗?我确信有人以前做过,对我来说很简单。
答案 0 :(得分:1)
您有两种选择。假设数据库未生成键值,这非常简单。
1)您发现加载表的顺序,以便每个带有外键的表都在其引用的表之后 加载。
2)您在SqlBulkCopy中关闭约束检查,然后在加载后选择检查约束。
要在加载后检查约束,请运行类似
的命令alter table SomeTable with check check constraint fk_SomeTable_OtherTable
如果您具有数据库生成的密钥,那么这将更加困难。但是,解决此问题的最佳方法是使用IDENTITY列中的SEQUENCE对象,然后运行sp_sequence_get_range将新的密钥范围获取到客户端,然后首先在客户端应用密钥。