程序员应该使用SSIS,如果是,为什么?

时间:2010-08-24 15:36:29

标签: c# .net sql-server ssis

作为.NET开发人员,出于什么原因我应该优先考虑SSIS包而不是编写代码?我目前正在生产的产品中有一吨的包装,而且它们都是“写”(也许画?)和维护的噩梦。每个包看起来像一碗多彩的意大利面,C#和VB.NET脚本混合在抽象分解的点。要弄清楚每个“执行SQL任务”或“Foreach循环”的作用,我必须双击该死的东西并浏览分散在多个标签中的文字值和表达式树。

我很开放,所以我想知道是否有其他优秀的开发人员比仅仅编写代码更有效率。如果您确实发现SSIS更高效,请告诉我原因。

7 个答案:

答案 0 :(得分:88)

我每天都使用SSIS来维护和管理大型数据仓库和多维数据集。我已经有100%的商业智能和数据仓库两年了。在此之前,我是一名10岁的.NET应用程序开发人员。

SSIS的价值是作为工作流引擎将数据从一个点移动到另一个点,可能会有一些有限的转换和条件分支。如果您的软件包包含大量脚本,那么您的团队正在使用SSIS执行错误的任务,或者对SQL不满意或者已经加入了炒作。 SSIS包非常难以调试。脚本组件是一个绝对的噩梦,应该只用于格式化,循环或作为最后的手段。

  1. 保持您的软件包简单,SQL任务和数据流任务。
  2. 在SSIS之外做尽可能多的工作,最好是在SQL
  3. 将变量保存在单个全局范围内
  4. 将SQL保留在变量或存储过程中,永远不会内联
  5. 将变量值保存在配置存储中,最好是SQL数据库

答案 1 :(得分:47)

我多次尝试使用SSIS,并放弃了它。 IMO在C#中完成我所需要的一切要容易得多。 SSIS太复杂了,它有太多陷阱,而且它不值得。花更多的时间来提高C#技能比花在学习SSIS上的时间要好得多 - 你将获得更多的培训回报。

在VS解决方案中查找和维护功能也非常简单。使用VS进行单元测试很容易。我需要做的就是检查Subversion中的源代码,并验证它是如何加载的。单元测试SSIS软件包非常涉及温和。

此外,有些情况下SSIS无法在某些行中填充某些列,只是跳过它们而不会引发异常。我们花了很多时间进行故障排除并弄清楚发生了什么。用C#开发替代解决方案花了不到一个小时,两年内没有任何问题。

答案 2 :(得分:14)

在我看来 - SSIS仅用于ETL操作,并且不应包含该范围之外的逻辑。

答案 3 :(得分:10)

我有一个不幸的经历,我们认为SSIS是一个很好的解决方案,可以聚合和组合来自多个来源的数据。不幸的是,它起初效果很好但随后需求发生变化,我们(最终)意识到这是错误的工具。

也许我们只是错误地使用它但是如果我们改变了我们的模式我们遇到了很多困难,我们最终只是重复使用前端的ORM定义来编写C#中的自定义工具来执行此操作。因为我们已经拥有了数据模型,所以这非常简单。显然YMMV和我绝不是SSIS专家,但在这一案例中,SSIS引起了大量的重复工作和头痛,只是卷起袖子和“手动编码”它比预期的要容易。

因此,在考虑SSIS时,我会考虑很多灵活性。

答案 4 :(得分:5)

SSIS占有一席之地,而且这个地方不是通用编程,也不是存储过程的替代品。它来自ETL学校(Extract,Transform和Load),这就是它的强项所在。

旧名称(DTS,数据转换服务)和新名称(SSIS,Sql Server Integration Services)都清楚地表明它是一种服务(或一组服务),旨在操纵数据以将SQL Server数据库集成到更大的进程中

答案 5 :(得分:4)

如果您想以编程方式移动数据,可能需要查看Rhino ETL。

我也正在研究我自己的框架Fluent ETL,因为我发现SSIS对于与开发相关的简单数据任务有点过多,比如从CSV文件加载单元测试数据。

答案 6 :(得分:3)

SSIS不是一个程序。在SSIS中,很多东西都会更快,你可以获得非常好的详细进度和错误信息作为管理员 - 这在SSIS要解决的场景中非常好,因为有时出现问题并且管理员需要大量的信息。

话虽这么说,如果你没有自我修饰的东西,SSIS就不是那么有用了 - 它们是出于某种意义,对一般编程过于苛刻会使它们变得很糟糕。