c# - C# SqlBulkcopy 插入在从 2005 年到 2014 年更新 SQL Server 时表现不同
问题描述
我有一个Employee
包含这些列的表:
- ID int(主键,自动递增 1)
- 员工姓名
- 薪水
- Joining_Date(具有 ASC 顺序的聚集索引)
现在,当我们使用SqlBulkCopy
C# 应用程序将数据保存到 SQL Server 2005 数据库中时,它会以与 Datatable 行相同的顺序插入行。
但是当我们将该数据保存到 SQL Server 2014 中时,行的顺序会根据聚集索引列发生变化。
C#代码:
DataTable dtEmployee = new DataTable();
//Inserting employee records in datatable
bulkCopy.WriteToServer(dtEmployee);
请提供行为变化(如果有)以及如何解决。也欢迎多种设计方法
我们有两个选择——
忽略 Bulkcopy 并一一插入行。这在连接中有问题,并且由于网络问题导致回滚而中断
通过具有时间戳列的批量复制将数据存储在表中。这样,我们可以运行一个作业,根据某个作业的时间戳将数据填充到最终表中。根据当前系统,这是不太可接受的。
这是带有 SQL Server 2005 和 SQL Server 2014 的 Windows server 2008
解决方案
确定 SQL 大容量复制操作会留下可以按特定顺序检索的记录的唯一方法是为每一行包含一个行号。如果您已经在数据表中排序了数据,请在 SQL 表和数据表中添加另一列以获取“插入行号”或类似的内容。
- 将数字字段添加到您的数据表。
- 将行号放在该字段中。
- 将行号的数字字段添加到 SQL 表
- 进行批量复制
- 使用行号字段来确定原始数据的顺序
推荐阅读
- javascript - 主页在第一次访问时不加载,当滑块图像处于活动状态时 - Prestashop
- javascript - 在前端检查条带订阅状态是否可靠?
- c++ - 为什么我的断言失败,向量下标超出范围
- javascript - 如何在使用 JavaScript 滚动时修复图像?
- python - pip install 命令中的 -r 有什么用?
- c# - 使用 Linkledin API V2 检索/发送消息
- flutter - 我无法使用 google_mobile_ads 显示制作横幅广告
- azure - 每个月 5 日的 Azure Blob 数据
- flutter - Flutter SearchDelegate:如何从文本光标更改蓝色气泡的颜色并选择?
- php - Laravel如何在存在其他主表列时按相关列排序