【问题标题】:SSIS - Output a single value from an OLE DB Command and use it on a OLE DB SourceSSIS - 从 OLE DB 命令输出单个值并将其用于 OLE DB 源
【发布时间】:2015-07-23 23:15:44
【问题描述】:

我的数据流工作得很好,它是由查找组件评估的源的复合,然后它执行 upsert,图表如下所示:

现在,在 BanqueCIBI(ole db 源)上,我有一个 SQL 命令文本,我想在其中接收来自另一个组件的参数以将其用作 valueDate。这是现在的查询:

SELECT [IdTransactionType]
  ,[IdBank]
  ,[IdBanqueDetailHistoryRef]
  ,[IdBanqueDetail]
  ,[IdBanqueHeader]
  ,[CCI]
  ,[ValueDate]
  ,[Text]
  ,[Reference]
  ,[Amount]
  ,[Sign]
  ,[IdCurrency]
  ,[OrigBranch]
  ,[dtCreatedOrModified]
  ,[oldText]
  ,[oldReference]
  ,[IdAccount]
  ,[IdSubAccount]
  ,[Date]
  ,[IdRD]
  ,[Flag]
  ,[History]
  ,[DtDate]
  ,[iTIB]
  ,[iSAP] 
FROM [dbCibi3].[dbo].[BanqueDetailHistoryRef] 
WHERE [ValueDate] = '2015-31-01'

因此,图表将如下所示:

现在,新的 OLE DB 命令如下所示:

这是上面源代码中调用的 usp_GetDateParamsSSIS:

USE [dbMODIFE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_GetDateParamSSIS] 
    @name VARCHAR(50) = NULL,
    @value DATETIME OUTPUT
AS
BEGIN
    SELECT TOP 1 @value =valueDate FROM helperPARAMS_SSIS WHERE name = @name;
END

那么,我如何在 BanqueCIBI 组件上使用 @value OUTPUT 呢?非常感谢! (请注意,BanqueCibi 和新组件正在查询不同的服务器,并且由于公司的政策,链接服务不是一个选项)。

【问题讨论】:

  • 您提供给存储过程的名称参数来自哪里?
  • 我不确定您的评论是否正确。但它应该来自我刚刚添加的存储过程的输出。
  • Err,我在你的问题中只看到一个存储过程。它将 Name 作为输入并返回 Value 作为输出。所以我的问题是,当您调用它时,您从哪里获取将 IN 传递给存储过程的 Name 值?
  • 啊,那是通过“硬编码”

标签: sql-server ssis oledb


【解决方案1】:

好的,因为您将硬编码的 Name 参数传递给您的存储过程,我假设这是一个存储过程,您只需要为每次执行包调用一次,而不是您调用一次的东西数据源中的每一行。

在这种情况下,不要在数据流中使用 OLE DB 命令调用存储过程。

相反,使用您在命令流中的数据流任务之前放置的执行 SQL 任务来调用它。将 proc 的返回值指向包级变量。

然后在数据流源 (BanqueCIBI) 中,将该变量映射到 SELECT 查询的第一个参数。

互联网上提供了所有这些技术的示例。但是,如果您发现一个您在关注问题时遇到问题,请随时使用详细信息编辑您的问题,或者如果它的范围与此问题有很大不同,请创建一个新问题。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多