批量插入到自引用表中

2024-02-22

这个问题是一部分一个更复杂的问题 https://stackoverflow.com/questions/55047552/how-to-lock-and-unlock-a-sql-server-table?noredirect=1#comment96846989_55047552我正在分解成更小的块(为了我的理智)。

假设我有一个Parts自引用的表看起来像这样:

PartId  ParentPartId  Description             PartNumber   IsCatHeader     ProviderId
---------------------------------------------------------------------------------------
9292       null       'Engine Parts'           null           1      'Engine Parts||1'
9293       9292       'Engine Bolts'           null           1      'Engine Bolts||1'
9294       9293       '6mm Engine Bolt'        'X1-234-ABC'     0      '6mm Engine Bolt|X1-234-ABC|0'
9295       9293       '5mm Engine Bolt'        'X2-934-BCD'     0      '5mm Engine Bolt|X2-934-BCD|0'
9296       9295       '5mm Engine Bolt Washer' 'X2-934-GED'     0      '5mm Engine Bolt Washer|X2-934-GED|0'

你明白了。现在...我们正在导入这些部分的整本书(大量 CSV 文件),以适应一本书中的数百个行项目。

书籍中的部分内容经常是重复的,我们工作的一部分就是将重复内容排除在数据库之外。

源代码没有为这些部分提供任何类型的唯一 ID,因此我们创建了一个ProviderId列是来自创建唯一字符串的每条记录的数据部分的集合。然后我们可以在导入时使用它来检查重复项。 (本专栏中的实际数据比我在此处显示的更复杂。)

那么,现在解决我的问题。我正在尝试找出批量执行此操作的最佳方法。一种选择(不是一个好的选择)是从 C# 应用程序一次循环浏览每一项...插入父项、获取范围标识、插入所有子项等等。恶心。在一本大书中,这将导致每本书进行数千次数据库调用。不是一个选择。

我们需要批量插入解决方案。但我们在自引用方面遇到了一个真正的难题。

我们最初的想法是用 C# 构建整个数据模型,包括所有PartId's and ParentPartId的。然后直接批量插入Parts桌子。然而,这样做的问题是知道从什么 ID 开始。请记住,多个进程将同时运行,并且许多部分将是重复的。我们尝试使用 SEQUENCE 对象,但这带来了问题...... 100% 可能会处理重复的书籍,如果我们使用 SEQUENCE,这将导致 ID 中出现巨大的间隙。

我现在追求的课程是这样的......我们已经创建了一个Parts_Staging表格看起来几乎与实际表格一样Parts桌子。我们可以对其进行批量插入,没问题。然后使用一个简单的查询ProviderId用于查找记录的列Parts_Staging不存在于Parts并将它们移过来。

但对于这条路径,我没有足够的创造力(或经验)来想象一种方法来进行此移动/合并并保持自引用 id 的完整性。

我一直在阅读类似“如何将数据插入到sql server中的自引用表中? https://stackoverflow.com/questions/14955439/how-to-insert-data-into-self-reference-table-in-sql-server" and "“但到目前为止我仍然没有看到异象。


好的。这就是我要做的。首先,用 C# 构建集合中的序列及其父/子关系。但我会把它放在不同的专栏中,也许是这样的BatchPartId and BatchParentPartId。 (也许是不同的关联表。这并不重要。)

| PartId | ParentPartId | BatchPartId | BatchParentPartId |
|--------|--------------|-------------|-------------------|
|        |              | XX1901      |                   |
|        |              | XX1902      | XX1901            |
|        |              | XX1903      | XX1901            |
|        |              | XX1904      | XX1903            |
|        |              | XX1905      | XX1903            |

然后,插入整个列表,允许PartId被创建。

| PartId | ParentPartId | BatchPartId | BatchParentPartId |
|--------|--------------|-------------|-------------------|
| 55     |              | XX1901      |                   |
| 56     |              | XX1902      | XX1901            |
| 57     |              | XX1903      | XX1901            |
| 58     |              | XX1904      | XX1903            |
| 59     |              | XX1905      | XX1903            |

邮寄时,您可以在此处填写ParentPartIdPartId对应的行的BatchPartId from BatchParentPartId子行的。

| PartId | ParentPartId | BatchPartId | BatchParentPartId |
|--------|--------------|-------------|-------------------|
| 55     |              | XX1901      |                   |
| 56     | 55           | XX1902      | XX1901            |
| 57     | 55           | XX1903      | XX1901            |
| 58     | 57           | XX1904      | XX1903            |
| 59     | 57           | XX1905      | XX1903            |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量插入到自引用表中 的相关文章

  • 在VB.NET中获取文件修改日期

    我的文件夹中有许多文件 我需要获取最后修改日期 所以我用了 FDate IO File GetLastWriteTime FName 对于某些文件 它工作正常 但对于其他文件 我得到的日期为 1 1 1601 但是当我在 Windows 资
  • C# 中 PKCS11Interop 库的线程安全使用 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 PKCS11Interop 在 HSM 内执行密钥管理操作 我使用的 HSM 是 Thales PCI Express 下面是
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • ASP.NET MVC 动作过滤器

    有谁知道即使在 CATCH 块中 ActionFilterAttribute 类的 OnResultExecuted 方法是否也会执行 ie CookiesActions public ActionResult Login Usuarios
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • Control.Invoke 是否泵送消息?

    Control Invoke 在被阻塞时是否继续在调用它的线程中泵送消息 系统 Windows 窗体 不会 Invoke 是阻塞的 整个线程将阻塞 直到对 Invoke 的调用返回 还有开始调用 http msdn microsoft co
  • 表单上的 KeyEvents 只能与 CTRL 结合使用

    Code Private Sub KeyHandling ByVal sender As Object ByVal e As System Windows Forms KeyEventArgs Handles Me KeyDown Sele
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被

随机推荐

  • 在 Phonegap 2.5 中加载外部 URL 时出错

    我从头开始创建了一个新的 Phonegap 2 5 项目 我一直在尝试在其中加载外部 URL 但在加载实际 URL 之前 我总是在启动时弹出输入框 我首先看到一个带有网站 URL 的弹出窗口 然后在输入框中显示 DeviceInfo Dev
  • 通过多点连接发送和接收邀请

    我知道这个问题之前已经被问过 但我只是想知道为什么它在我的特定情况下不起作用 我正在尝试从一个视图控制器的多点连接发送邀请 并在另一个视图控制器上接收它 我的发送代码是 self invitePeer selectedPeerID toSe
  • Chrome 中的 cors 预检选项请求速度缓慢 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在努力解决一个奇怪的问题 这只发生在 Chrome 中 我的 Angular SPA 与不同子域 api domai
  • html 堆栈顺序

    考虑以下代码
  • 将字符串转换为日期 [包含年份和季度]

    我有一个 pandas 数据框 其中一列包含年份和季度的字符串 格式如下 2015Q1 我的问题 如何将其转换为两个日期时间列 一个代表年份 一个代表季度 您可以使用split http pandas pydata org pandas d
  • EF Core 中修改的实体所拥有的类型属性不持久

    我正在尝试在 EF Core 中实现一些在 EF 6 中对我来说非常有效的目标 我正在序列化 a 的内容List
  • 不使用密钥库的客户端证书

    我试图弄清楚是否有任何方法可以让 NET 客户端使用客户端证书而不以任何方式涉及 Windows 密钥库 我有一个这样的代码片段 test1 Service s new test1 Service X509Certificate c X50
  • JFreeChart日期轴格式化问题

    我有一个时间序列图表 我的 X 轴是日期 Y 轴只是数字 我正在尝试格式化 x 轴上的日期 但是我不断收到异常 我的代码如下 TimeSeries trueSeries new TimeSeries True Data TimeSeries
  • firebase 正在从数据库中检索已删除的数据

    我正在使用 firebase 实时数据库 它对于我的应用程序的某些部分运行良好 我正在阅读 youtube 上的一个教程 该教程用用户填充 collectionView 它使用 NSDictionary 获取照片 URL 和用户名 并将它们
  • Spring Boot + Angular 文件上传无法上传同一文件两次

    chrome 网络下出错 timeStamp status 400 error Bad Request message Required request part file is not present path url as hosted
  • malloc 和 realloc 之间的区别?

    假设我有两个用于创建 10 个元素的整数数组的代码示例 int pi int 0 realloc pi 10 另一种是正常写法 即 int pi pi malloc 10 sizeof int 现在 我的问题是 第一种赋值是合法的 但没有被
  • 点间最短距离算法

    给定平面上的一组点 找到由这些点中的任意两个点形成的最短线段 我怎样才能做到这一点 最简单的方法显然是计算每个距离 但我需要另一种算法来比较 http en wikipedia org wiki Closest pair of points
  • Nginx 身份验证(本地网络除外)

    来自 apache2 的一个功能我无法实现 仅要求对外部访问进行身份验证 但对本地网络上的用户进行免费访问 有什么想法可以轻松处理这种情况吗 任何帮助 将不胜感激 我已经删除了之前的答案 并想建议我在下面提供的解决方案 我做了一些搜索 找到
  • .net标准类库-不支持分布式事务错误

    我在 net标准类库项目中开发了一个日志服务 它可以完美工作 无需系统 事务 事务范围类 当我向进程添加事务时 记录器插入方法引发异常 该平台不支持分布式事务 当我使用 System Transaction 将代码添加到核心控制台应用程序时
  • 我应该如何在KAA中实现Rest API

    我使用 Kaa 沙箱发送通知 我必须在窗口终端上运行这些代码 curl v S u devuser devuser123 F notification applicationId 3 schemaId 4 topicId 1 type US
  • Python 全局变量的疯狂

    您有三个文件 main py second py 和 common py 通用 py usr bin python GLOBAL ONE Frank main py usr bin python from common import fro
  • Blazor - 在运行时更改 UI CultureInfo

    我需要根据每种文化的资源文件在运行时更改文化 Expected 用户单击从当前语言切换到另一种语言的按钮 页面中的文本根据每种文化的资源文件进行刷新 Actual 用户单击从当前语言切换到另一种语言的按钮 页面中的文本根据每种文化的资源文件
  • Visual Studio 2015 中没有针对 AngularJS TypeScript 的 IntelliSense

    我正在 Visual Studio 2015 的 TypeScript 中使用 ASP NET 5 和 AngularJS 构建一个应用程序 但是 即使在通过 NuGet 安装了 AngularJS Core 和 DefinelyTyped
  • React库如何直接需要它的源库?

    我正在查看 Facebook 的 React 源代码 发现在整个项目源代码中 他们没有指定加载自己模块的相对路径 例如 而不是做var foo require bar foobar 图书馆使用var foo require foobar 就
  • 批量插入到自引用表中

    这个问题是一部分一个更复杂的问题 https stackoverflow com questions 55047552 how to lock and unlock a sql server table noredirect 1 comme