每天从csv将数据插入SQL Server

时间:2014-05-12 16:14:39

标签: c# sql sql-server csv ssis

我需要每天将大量数据插入到我的SQL Server数据库中。数据是从文件中插入的,其中行表示今年的数据,其中一些行可能会更改,而新行每天都会添加到文件中,因此我需要检查文件中是否更改了某行。更新数据库并始终插入新行。

那么,你推荐什么方法(清除数据库/批量插入,逐行读取和插入C#,ssis等)?

3 个答案:

答案 0 :(得分:1)

根据您的评论,我会删除表格并使用SSIS每晚重新加载CSV,然后在夜间作业中创建新索引。
如果每个CSV包含所有相关信息,那么这是最简单的方法。 我没理由错过可以看到的更新/合并逻辑。

另外,鉴于您对SSIS的厌恶,在C#脚本中应该很容易实现创建索引的直接表加载。

SSIS路线:

首先,按照演示here构建第一个加载。

接下来,右键单击该表是SSMS并生成该表的创建脚本。

然后,在加载任务之前运行的SSIS中创建一个执行SQL任务。该SQL任务将运行以下2段代码drop table <your table name>,然后是您之前复制的create table脚本。

最后(并且可选)创建一个执行SQL任务,该任务在将创建任何所需索引的数据加载任务之后运行。由于我对您的数据一无所知,因此我建议使用非聚集索引,其中包含您在报告中用于参数的所有列,例如CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson (SalesQuota, SalesYTD);

虽然不是一个完美的解决方案,但它应该足以满足您的目标,并且易于维护。

我可以稍后添加截图。

答案 1 :(得分:0)

有不同的方法取决于应用程序如何使用数据,我建议遵循以下步骤: 创建计划作业以将数据上载到临时表

  1. 批量插入临时表
  2. 将Temp Table的新行插入主表
  3. 将现有行从Temp更新为主表
  4. 或者您可以通过将Temp Table与Main Table进行比较然后构建将每个东西从Temp Table插入到主表中来删除现有行。

答案 2 :(得分:0)

听起来你需要一个“upsert”。 SQL Server支持实现此目的的the MERGE statement。您可以将csv数据提供给临时表&amp;然后将它合并到具有该语法的目标表中。可能SSIS会让你把它搞清楚。