SQL Server存储过程转换为SSIS包

时间:2011-05-28 17:46:06

标签: sql-server ssis etl

问题:目前我们有许多存储过程(很长达10,000行),这些存储过程是由各种开发人员在过去10年中针对各种要求编写的。现在很难管理那些复杂/长期存储过程(没有适当的文档)。

我们计划将这些存储过程移动到SSIS ETL包中。

有人这样做过去了吗?如果是,应该采取什么方法。

感谢是否有人可以就将存储过程转换为SSIS ETL包的方法提供建议。

由于

2 个答案:

答案 0 :(得分:5)

之前我已经完成了这项工作,对我的团队来说效果很好的是从原始源开始逐步重构,然后迭代重构工作。

第一步是尝试将存储过程逻辑模块化为我们链接在一起的执行SQL任务。每项任务都经过测试和批准,然后我们整合并确保新流程与遗留流程的结果相匹配。

在此之后,我们可以在整个团队中划分单独的执行SQL任务,并对我们是否可以将执行SQL任务中的SQL进一步重构为本机SSIS任务进行负载平衡。

每个重构都经过单独的单元测试,然后进行集成测试,以确保整个流程输出仍然像传统过程一样。

答案 1 :(得分:3)

我建议采取以下步骤:

  1. 分析存储过程以识别源和目标列表。例如:如果存储过程dbo.TransferOrders将数据从表dbo.Order移动到dbo.OrderHistory。然后,您的来源将为dbo.Order,目的地为dbo.OrderHistory

  2. 列出源和目标后,尝试按源/目标按照您的偏好对存储过程进行分组。

  3. 尝试查看存储过程中是否发生任何数据转换。 SSIS中提供了良好的数据转换任务。您可以评估这些功能并将其中的一些功能从存储过程移动到SSIS。由于SSIS是一种工作流类型的工具,我觉得更容易理解包内的内容,而不是滚动多行代码来理解功能。但是,那只是我。偏好因人而异。

  4. 尝试识别存储过程中的依赖项并准备层次结构。这将有助于以适当的顺序将任务放入包中。

  5. 如果您有一个名为dbo.Table1的表填充5个不同的表。我建议将它们放在一个包装中。即使这个数据填充由5个不同的存储过程执行,您也不需要使用5个包。不过,这又取决于您的业务情况。

  6. SSIS项目解决方案可以在其中包含多个包并重新使用数据源。您可以使用控制流任务上的Execute SQL task来运行现有查询,但我建议您还要查看SSIS中可用的一些不错的转换任务。我在我的项目中使用它们,它们在ETL操作中运行良好。

  7. 这些步骤可以通过一次查看一个存储过程来完成。您不必一次完成所有这些操作。

    请查看我在其他Stack Overflow问题中给出的一些示例。这些应该可以帮助您了解使用SSIS可以实现的目标。

    Copying data from one SQL table to another

    Logging feature available in SSIS

    Loading a flat file with 1 million rows into SQL tables using SSIS

    希望有所帮助。