【问题标题】:Bulk Insert DataSet with multiple related tables into SQL Server C#将具有多个相关表的数据集批量插入 SQL Server C#
【发布时间】:2019-02-02 07:38:58
【问题描述】:

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

mydataset.ReadXML(filename);

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

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

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

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

【问题讨论】:

    标签: c# sql-server datatable foreign-keys dataset


    【解决方案1】:

    您有几个选择。假设数据库没有生成键值,这很简单。要么

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

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

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

    alter table SomeTable with check check constraint fk_SomeTable_OtherTable
    

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

    【讨论】:

    • SQL 服务器正在生成新的身份列 - 因为我不知道传入的作业数据是否会在无法保证的 xml 文件中包含重复信息,我不想由于可能存在一年甚至一周的重复信息而终止该进程。
    • 我正在考虑可能尝试在表上使用 dataset.CreateReader(),然后尝试以某种方式更新数据库 - 但我需要研究 - 甚至可能 translate 尝试一下- 只需要先做一些研究我寻找简单和可重用性..关于这些有什么想法吗?
    • 我看不出这有什么帮助。 SqlBulkCopy 和 SqlDataAdapter 都已经知道如何更新数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多