c# - 将具有多个相关表的数据集批量插入 SQL Server C#
问题描述
我有一个包含多个表的数据集,源文档是一个 XML 文件。
mydataset.ReadXML(filename);
有多个具有多个关系的表。我有通过代码创建的 SQL 中的数据库 - 表、列和关系。
现在我想插入数据。(是的,我想要一切)。 编辑: SQL 表使用身份列自动生成 - 因为我不确定传入数据永远不会重复我想假设是唯一的参数之一。
那么考虑到我有外键约束,我应该采取什么方法来确保输入数据,我应该如何迭代数据集中的表以确保我不会尝试插入需要现有 id 的表中。我是创建一个硬编码映射(我也不喜欢),还是我遍历表寻找外键并验证父表等。
有任何想法吗 ?我相信以前有人这样做过,并且对我有一个简单的答案。
解决方案
你有几个选择。假设数据库没有生成键值,这很简单。任何一个
1)您发现加载表的顺序,以便每个带有外键的表在它所引用的表 之后加载。
2)您在SqlBulkCopy中关闭约束检查,然后在加载后选择检查约束。
要在加载后检查约束,请运行类似的命令
alter table SomeTable with check check constraint fk_SomeTable_OtherTable
如果您确实有数据库生成的密钥,这一切都更加困难。但解决这个问题的最佳方法是使用 SEQUENCE 对象而不是 IDENTITY 列并运行sp_sequence_get_range以将新的键范围获取到客户端并首先在其中应用键。
推荐阅读
- reactjs - 在 React 中限制映射值的字符长度
- angular - 如何在 2 个输入中创建自定义表单验证器?我想验证一个输入数字总是大于另一个
- java - 设置 HEAPROFILE 后,jetty 立即退出
- powerbi - DSN 在 Microsoft Access 中显示表,但在 Power BI Desktop 中不显示
- c# - 尽管只执行了一个测试用例,但 TestCaseSource 正在执行多次
- python - 线程错误中函数的返回值
- c++ - fltk1.3 有时会添加自定义小部件
- java - 三线程通信和同步
- vb.net - ReadLine 和硬编码数据产生不同的结果
- haskell - Change values to indices in a `Conkin.Traversable` without `unsafeCoerce`