合并旧数据的最佳方式

时间:2009-11-20 18:27:26

标签: c# sql batch-file

我正在为C#中的业务制定价格表管理程序(Prototype是Win Forms,但我正在考虑将WPF用于最终的ap作为MVVM学习练习)。

我们的EMS系统基于COBOL后端,并且将保持这种状态至少3年,因此我无法直接访问它的数据。我想定期从EMS系统中提取数据,以确保定价保持同步(并以不可编辑的方式向用户提供其他信息,例如bin位置)。我正在做的是......

使用WinBatch每晚自动运行报告,然后使用Monarch将文本报告转换为平面文件(.xls?) 将文件放入一个文件夹并写一个小的ap来读取它并将其添加到数据库

我应该如何将其添加到数据库中? (SQL Express)我可以有一个表,每次都完全替换,但我在大多数情况下都是初学者,我担心如果在价目表ap使用数据库时更换整个表会发生什么。

麦克

3 个答案:

答案 0 :(得分:1)

如果截断并重新填充整个表,则应在单个事务中执行此操作并放置完整的表锁。这更安全,更快。

您还可以更新所有已更改的行,然后插入新的(缺少的行),然后删除此次运行中未更新的所有行(在每行中插入某种版本号以确定此行)。

答案 1 :(得分:0)

首先从旧应用程序创建.txt文件。然后使用批量插入将其拉入工作台,以便进行任何需要清理的清理工作。使用t-sql进行清理。然后运行t-sql将新数据插入到正确的表中和/或更新数据已更改的行。如果有toomany记录,请批量插入和更新。将所有这些安排为在数据库不忙的几个小时内运行的作业。

你当然可以在SSIS中做到这一切,但我不知道Express是否可以使用。

答案 2 :(得分:0)

上次更新价格时是否有可用的字段/表格告诉您?如果是这样,您只需提取最近更新的行并在数据库中更新它......假设您的cobol应用程序的数据存储区中有一个随时可用的唯一主键。

这不是最新版本,因为您将其作为夜间脚本运行以更新新应用程序使用的数据库。您可以创建一个.net脚本来专门查询cobol数据存储区,无论用户要查找的价格是多少,如果cobol数据存储区的更新时间比您记录的更新,则更新SQL Server记录。

(我根本不熟悉cobol,只是把想法扔出去)