SSIS - 从 OLE DB 命令输出单个值并在 OLE DB 源上使用它
SSIS - Output a single value from an OLE DB Command and use it on a OLE DB Source
我有一个工作正常的数据流,它是一个由查找组件评估的源的复合,然后它执行更新插入,图表如下所示:
现在,在 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 和新组件正在查询不同的服务器,并且由于公司的政策,链接服务不是一个选项)。
好的,因为您将硬编码的 Name 参数传递给存储过程,所以我假设这是一个存储过程,每次执行包时只需调用一次,而不是您正在调用的存储过程为数据源中的每一行调用一次。
在这种情况下,请勿在数据流中使用 OLE DB 命令调用存储过程。
相反,使用您在命令流中 DataFlow 任务之前放置的执行 SQL 任务来调用它。将 proc 的 return 值指向包级变量。
然后在数据流 (BanqueCIBI) 的源中,将该变量映射到 SELECT 查询的第一个参数。
所有这些技术的示例都可以在 Internet 上轻松获得。但是,如果您发现一个问题,请随时使用详细信息编辑您的问题,或者创建一个新问题(如果它的范围与这个问题有很大不同)。
我有一个工作正常的数据流,它是一个由查找组件评估的源的复合,然后它执行更新插入,图表如下所示:
现在,在 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 和新组件正在查询不同的服务器,并且由于公司的政策,链接服务不是一个选项)。
好的,因为您将硬编码的 Name 参数传递给存储过程,所以我假设这是一个存储过程,每次执行包时只需调用一次,而不是您正在调用的存储过程为数据源中的每一行调用一次。
在这种情况下,请勿在数据流中使用 OLE DB 命令调用存储过程。
相反,使用您在命令流中 DataFlow 任务之前放置的执行 SQL 任务来调用它。将 proc 的 return 值指向包级变量。
然后在数据流 (BanqueCIBI) 的源中,将该变量映射到 SELECT 查询的第一个参数。
所有这些技术的示例都可以在 Internet 上轻松获得。但是,如果您发现一个问题,请随时使用详细信息编辑您的问题,或者创建一个新问题(如果它的范围与这个问题有很大不同)。