gpt4 book ai didi

c# - TSQL 大量插入关系数据,带外键 Upsert

转载 作者:行者123 更新时间:2023-11-30 17:14:31 25 4
gpt4 key购买 nike

相对简单的问题。
Table AID int PK,唯一的Name varchar(500),和cola, colb
表 B 有一个指向 表 A 的外键。

因此,在应用程序中,我们将表 A 和表 B 的记录生成到内存中的数据表中。

我们将在大量“客户端”上生成数千条这样的记录。

最终我们调用存储这些记录。但是,表A的记录可能已经存在于数据库中,所以我们需要获取已经存在的记录的主键,并插入缺失的记录。然后用正确的外键插入表 B 的所有记录。

建议的解决方案:

我正在考虑将 xml 文档发送到 SQL Server,以将其作为行集打开到 TableVarA 中,使用已存在记录的主键更新 TableVarA,然后插入缺少的记录并将其输出到 TableVarNew,然后我从 TableVarA union all TableVarNew 中选择 Name 和主键.

然后在代码中将正确的 FK 填充到内存中的 TableB 中,并使用 SqlBulkCopy 插入所有这些记录。

这听起来是个不错的解决方案吗?如果是这样,在内存中为 TableB 填充 FK 以匹配返回数据集中的主键的最佳方法是什么。

最佳答案

听起来像是一个计划 - 但我认为 Table A 的处理可以更简单(单个内存表/表变量应该足够了):

  • 有一个 TableVarA,其中包含 Table A 的所有行
  • 使用 ID 更新所有现有行的 ID(应该可以在单个 SQL 语句中完成)
  • 将所有不存在的行(仍然有一个空的 ID)插入 Table A 并记下它们的 ID<

这一切都可能发生在一个表变量中——我不明白为什么你需要到处复制东西......

如您所说,处理完Table A 后,更新Table B 的外键并一次性批量插入这些行。

我不太清楚的是 Table B 是如何引用 Table A - 你只是说它有一个 FK,但你没有指定它是哪一列打开(假设打开 ID)。那么 Table B 中的行如何引用 Table A 的新行,这些行尚未插入,因此没有 ID表 A 中了吗?

关于c# - TSQL 大量插入关系数据,带外键 Upsert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8620794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com