SSIS包是导入和导出大量数据的最佳解决方案吗?

时间:2011-12-21 05:20:03

标签: c# sql-server sql-server-2008 ssis

我的要求是在nop commerce 1.9中我必须在excel表中插入多个折扣,因为在执行此任务之前我需要清楚哪一个是最佳解决方案。

Which is the fastest way to upload the excelsheet having more than 100,000 lines of code in C#?

我读过这个问题并且回答发现SSIS是一个选项。

实际上SSIS最适合大型文件导入和导出选项。 如果我使用SSIS包,我会得到什么其他好处?

5 个答案:

答案 0 :(得分:3)

对于~100,000行,对于此类数据,性能不应该是一个重要问题。 SSIS可以做到这一点,但它不是唯一的选择。我认为有三种合理的方法可以做到这一点:

<强> SSIS: 这可以读取excel文件。如果您的电子表格表现良好(即可信任 如果要正确布局,那么SSIS可以加载内容。它有一些错误记录 功能,但在实践中,它只能有用地转储日志文件或写出错误 一个日志表。可以将错误的行指向保留表。

优点

  • 加载过程相当容易开发。
  • 如果电子表格格式必须更改,则可以独立于应用程序更改SSIS包。
  • 可直接从电子表格文件中读取

<强>缺点:

  • 依赖于在系统上安装SSIS运行时。
  • SSIS实际上是一个服务器端安装;错误处理往往包括将消息写入日志。您需要找到一种方法,使用户可以使用错误日志来解决错误。

BCP或BULK INSERT: 您可以将电子表格导出为CSV并使用BCP或BULK INSERT语句加载文件。但是,这需要将文件导出为CSV并复制到数据库服务器上的驱动器或可访问的共享。

<强>优点:

  • 快速
  • 可以假设bcp存在于服务器上。

<强>缺点:

  • 需要手动步骤才能导出为CSV
  • 该文件必须放在可以安装在服务器上的卷上
  • 有限的错误处理设施。

SqlBulkCopy API: 如果您已经在使用.Net,则可以使用OLE自动化或ODBC从电子表格中读取,并使用SQL Server批量加载API加载数据。这需要您编写一个C#例程来进行导入。如果手动加载电子表格,则可以从用户的PC加载。

<强>赞成

  • 不需要在计算机上安装SSIS,
  • 文件可以位于用户的PC上
  • 加载过程可以是交互式的,向用户呈现错误并允许他们通过多次重试来纠正错误。

缺点:

  • 最努力发展。
  • 仅作为应用程序的一项功能实用。

答案 1 :(得分:2)

SSIS是一个ETL工具。您可以进行转换,错误处理(如Kumar所述),SSIS中的查找,您可以重定向无效行,添加派生列等等。您甚至可以向其添加配置文件以更改某些属性/参数...

如何将数据加载到SQL有更多选项。 1,SSIS - 你需要设计工作流程(你需要BIDS或VS来设计和测试包) 2,如提到的“demas”,您可以将数据导出到平面文件并使用BCP / bulk insert 3,你可以在SQL上使用openrowset操作符(必须启用ad-hoc分布式查询才能使用此功能)然后你可以从SQL查询excel文件 - 这可能是如何读取数据的简单方法:

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\test.xls', 'SELECT * FROM [Sheet1$]') 

- try to look on google for OPENROWSET + EXCEL to get more examples. In this scenario you can query also text files, ACCESS ...

有很多方法可以做到,但这实际上取决于你想要达到的目标。在这种情况下,100K行真的不多。

答案 2 :(得分:1)

SSIS是一个很好的解决方案,但如果性能对您来说最重要,我会尝试将excel文件转换为纯文本文件并使用BULK INSERT functionality

答案 3 :(得分:0)

错误记录 - 无效行可以轻松登录到单独的表中以进行进一步验证。

答案 4 :(得分:0)

如果您需要执行复杂的转换和所需的值检查,并且文件非常大(Excel文件中的100,000行很小),SSIS可能是最佳解决方案。它是一个非常强大,复杂的工具。

然而,这是一个很大的问题,SSIS很难有效地学习和工作,很难调试。我作为全职工作进口和出口,我花了一年多的时间来熟悉SSIS。 (当然我对数据的处理非常复杂而且根本不是那么简单,所以如果你没有进行任何复杂的转换,那么设置并不是那么糟糕,但是它远不如DTS那么简单,因为它具有更多可用的功能。如果您正在进行没有转换的简单导入,我相信其他方法可能更有效。

就性能而言,SSIS可以发光(它可以将数百万或更多的记录移动到速度至关重要的数据仓库),或者根据它的设置方式成为真正的狗。到达能够调整这些软件包之一的位置需要很高的技巧。