【问题标题】:How do you call a Stored Procedure in SSIS?如何在 SSIS 中调用存储过程?
【发布时间】:2009-04-13 20:13:46
【问题描述】:

我正在尝试创建一个 SSIS 包,该包从表中查询数据,并在另一个数据库中调用存储过程的每一行。

在我的旧 DTS 包中,我是这样做的:

EXEC myStoredProcedure ?, ?, ?

...然后我映射了参数。但是,在 SSIS 中,我不知道如何进行这项工作。

我有一个数据流任务,它首先运行数据查询。它将数据传递到 OLE DB 目标。我将数据访问模式设置为“SQL 命令”,但是当我尝试放入上面的 SQL 时,在解析 SQL 时出现“无效参数计数”。我无法进入映射屏幕。有什么想法吗?

【问题讨论】:

  • 为什么这么简单的任务使用 MS 的数据传输实用程序看起来如此复杂???这在 DTS 中很容易做到,因为设置无用的映射需要时间。
  • 我相信你可以在“数据流”级别做到这一点,事实上我确信我已经做到了,但我不记得怎么做了。例如,您还应该如何为失败的查找运行 INSERT proc

标签: sql-server sql-server-2005 stored-procedures ssis parameters


【解决方案1】:

在数据流中,OLE DB Command 可用于为数据流中的每一行执行 SQL 语句 - (MSDN documentation)

或者,您可以将源结果集存储在数据类型对象的变量中,并在控制流中使用Foreach Loop 容器(例如here)。

【讨论】:

  • 我认为这行得通,但我遇到了 Unicode 转换错误......我不确定如何解决它。
  • 如果没有更多细节,很难确定。您的 SP 是否采用 char 或 varchar 参数?
  • ...应该是 char 和/或 varchar 参数
  • nvarchar。当目标数据库是varchar和nvarchar时,我已经尝试过了。都不行。
【解决方案2】:

您将需要使用执行 SQL 任务。在 SQLStatement 部分中,您可以添加代码以执行存储过程。

为了传递参数,使用 ?语法并在“参数映射”部分指定参数。

一个很好的例子可以找到here

【讨论】:

  • 那么如何将数据传递到执行 SQL 任务中呢?我在参数部分没有看到任何有用的参数。只有“System::xxxxx”参数。
  • 该示例对我没有帮助,因为它只有 2 个特定场景。具体来说,我正在尝试运行 select 语句,并将每一行传递到另一台服务器中的存储过程中。你知道怎么做吗?
  • ^ 它确实有效。您需要定义自己的 OWN 变量,而不是使用 SYSTEM 级别的变量。您应该在包的控制流部分使用“执行 SQL 任务”。打开变量编辑器,在左上角添加您自己的 USER 级变量。
猜你喜欢
  • 2013-07-21
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多