【问题标题】:SSIS : how to run stored procedure in Data Flow TaskSSIS:如何在数据流任务中运行存储过程
【发布时间】:2019-01-29 20:12:10
【问题描述】:

我有一个执行此操作的数据流任务:

  1. 从 OLE DB 源,运行 SQL 命令以选择一些数据
  2. 查找不同的 SQL 数据库源,检查数据是否已存在
  3. 根据查找匹配输出与查找不匹配输出,使用不同的输入参数运行存储过程。输入参数将基于 #2 中的“可用查找列”结果

问题是如何运行某些输入参数并将其传递到我的存储过程中?

【问题讨论】:

  • 您肯定要考虑将 proc 调用移到数据流任务之外。像这样在您的数据流中使用OLE DB Command 将导致proc 为到达Lookup Match Output 路径的每一行调用。如果您有多个记录,这将成为您数据流的主要瓶颈。更好的设计是将Lookup Match Output 存储在单独的临时表中,然后从数据流之外的执行 SQL 任务中调用存储的过程。然后,您可以让 proc 处理临时表中的数据。

标签: sql sql-server stored-procedures ssis etl


【解决方案1】:

要在OLEDB命令中执行带参数的存储过程,只需要编写SQL命令并使用?指定参数。

示例:

考虑以下存储过程:

CREATE PROCEDURE dbo.SpInputOutput

    @input as int,

    @output as datetime output

AS

BEGIN

    SET NOCOUNT ON;


    set @output=DATEADD(Day,@input,getdate())

END

您应该编写以下命令:

exec SpInputOutput ? , ? output

并在“列映射”对话框中,将输入列映射到指定的参数。


更多详情,请查看以下链接:

【讨论】:

  • 谢谢,我认为这可能有效。出于某种原因,“可用目标列”下没有显示任何内容,因为完全不相关的其他存储过程出现错误......将四处询问。但除此之外,我认为这是正确的解决方案。
  • @ichachan 很乐意提供帮助,如果解决方案解决了问题,您必须接受它
【解决方案2】:

如果您只处理一个 SQL Server 作为数据源,那么编写一个包含所有逻辑的 SP 会更方便、更快捷。这样您就不必将数据传输到 SQL Server 之外并有额外的移动部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2023-03-26
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多