2012-11-09 75 views
0

我有大约100列约10000行的表。 定期地,我将收到一个具有类似数据的Excel,现在我需要更新表格。 如果Excel中存在新行,我必须将它们添加到数据库。 如果旧行已更新,我需要更新数据库中的行。 如果某些行已被删除,我需要从主表中删除该行并添加到另一个表中。比较SQL数据库中的记录与Excel和更新数据库相应

我曾经想过程序如下:

抓取所有行从数据库到数据集。 将Excel中的所有行导入到DataSet中。 现在使用连接比较这2个数据集并执行所需的操作。

我从来没有这种规模的数据工作,很担心性能。让我知道实现这一要求的理想方式。

在此先感谢。 :)

+0

你有没有想过只是在做这一切在SQL?即导入excel文档,然后更新您的表格,其中ID字段匹配等等,比编码要容易 – MikeSmithDev

+0

您说要删除所有不在Excel工作表中的记录,更新Excel工作表中更改的所有记录,然后插入Excel工作表中新增的所有记录。如果你希望你的表在一天结束时看起来与Excel工作表完全相同,为什么不放弃所有的旧数据并用新的东西重新填充表格? –

+0

,因为如果他的表在Excel工作表 – MikeSmithDev

回答

2

由于我的经验说,它很简单,如果你选择做的东西在T-SQL如下:

  1. 您可以使用"OPENROWSET""OPENQUERY",链接se rvers,DTS和SQL Server中的许多其他功能将excel文件导入临时表。
  2. 你可以写一些简单的查询来做到这一点。如果你使用的是SQL 2008,那么"MERGE"已经为你的问题做了很好的准备。

另一件事是,其性能远远超过C#不同。您可以使用"TOP"子句将比较分块并做许多其他事情。

希望它有帮助。 干杯

+0

我想给用户一个界面,所有这些操作都将自动完成,所以我不认为第一个答案适用于我。无论如何,我会阅读你的第一个建议,因为除了dtswizard之外我不知道其他任何东西。任何指针从哪里开始都会有所帮助。 不知道MERGE声明,我认为它完全适合我的目的。谢谢大家:) 同样,我不知道你是什么意思的TOP条款,请忍受我,这里的初学者。我会将其谷歌出来,但任何关于在哪里阅读的指针都会非常有帮助。 :) – Fahad

+0

如果你需要一个接口,它不会改变方式。如果我是你,我会创建一个数据库过程来执行操作,然后编写一个接口,以便用户能够控制,取消和查看操作结果。顺便说一下TOP子句限制你想要使用的记录(插入,更新,合并或任何其他)。你应该首先了解SELECT子句,一切都从那里开始......)干杯兄弟。 – Rikki

+0

另一件事,如果我在那里,我想和你有一只熊。我一直陷在这个地狱...... :) – Rikki

3

不用担心用10k纪录的表现,你不会注意到它...

也许是更好的方式来做到这一点是导入Excel文件中的一个临时表,并做处理用几个简单的SQL查询...你会节省开发时间,它可能会表现得更好......

+0

我也有大约100列,所以有点担心的表现。还没有处理过这么大的数据,所以有点着急。 :)将尝试创建一个临时表,为Excel数据建议,然后合并2 :)谢谢:) – Fahad

+0

-1性能取决于许多东西。正如提问者已经说过的,他们担心性能,而且他们可能会遇到很多情况,比如流量大,硬件不良,网络问题以及其他许多我们不知道的事情。因此,即使它是一个记录,表演也是一个问题。 – Rikki