我目前正在开发一个项目来解析excel表并将任何值插入到之前未插入的数据库中。该工作表包含大约80个不同名称的日期 - 值对,平均每对约1500行。
每个名称在本周末手动输入5个日期 - 值对。在周末,我的进程将解析excel文件并插入当前不在数据库中的任何值。
我的问题是,鉴于大量的总数据和每周增加的少量数据,您如何轻松确定需要插入哪些值?我考虑添加另一个表来存储为每个名称插入的最后一个日期,并在此之后获取任何行。
答案 0 :(得分:2)
最简单的解决方案,我会将它全部带入临时表并在服务器中进行比较。或者,具有适当排序和查找的SSIS可以确定差异并插入它们。
使用SQL在数据库中比较120000行并不重要,但是对数据库进行120000次单独调用以验证该行是否在数据库中可能需要一段时间才能在客户端进行。
答案 1 :(得分:2)
选项1将创建一个“lastdate”表,该表在周末导入结束时自动标记。然后在下一周你的程序可以查询该表中的最后一条记录,然后只在该日期之后从excel文件中读取。可能是你最好的选择。
选项2是在数据中查找唯一字段,并逐行检查数据库中是否存在该键。如果它不存在,则添加它,如果不存在,则不添加。如果选项1没有按预期工作,这将是我的第二选择。
答案 2 :(得分:0)
这一切都取决于您的解决方案需要防弹。如果您相信用户不会以任何方式调整电子表格以使其不一致,那么您的解决方案就可以了。
如果您想要安全起见(例如,如果某些旧值可能会发生变化),您需要将整个事物与数据库进行比较。说实话,你在这里谈论的数据量似乎不是很大,特别是当你的进程将在周末运行时。您仍然可以通过为数据库编写“批处理”类型的存储过程进行优化。
答案 3 :(得分:0)
感谢所有答案。
我已经决定,而不是创建一个存储最后日期的新表,我只选择每个名称的最大日期,然后在该日期之后将值插入表中。
这假设最后一个日期之前的数据保持一致,这对于这个问题应该没问题。