SSIS的OLEDB COMMAND中使用存储过程输出参数

本文介绍如何使用OLEDBCOMMAND调用SQL存储过程,并通过DERIVEDCOLUMN映射输出参数。示例展示了创建存储过程SpInputOutput,该过程接收输入参数并返回日期型输出参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OLEDB COMMAND使用存储过程输出参数,需要列对应关系,

可以使用DERIVED COLUMN 增加一列来对应输出参数。

 

看个例子:

 

CREATE PROCEDURE dbo.SpInputOutput 

    @input as int,

    @output as datetime output

AS

BEGIN

    SET NOCOUNT ON;


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

END

GO


 

CREATE TABLE [dbo].[OLEDBCommandInputTable](

    [DaysCount] [int] NOT NULL

) ON [PRIMARY]


 

在DERIVED COLUMN 增加表达式:

NULL(DT_DBTIMESTAMP),列为NEWVALUE.

在OLEDB COMMAND的属性:

exec SpInputOutput ? , ? output

列对应为 NEWVALUE -  @OUTPUT.

<think>嗯,用户问的是如何在SSIS使用OLE DB变量作为输出列,我需要结合之前提供的引用信息来回答。首先,我得回忆一下SSIS的基本结构和相关组件。OLE DB源通常用于从数据库获取数据输出列是指数据流中传递的列。用户可能想用变量的值作为输出列的值,而不是直接从表或视图中获取。 根据引用[1],OLE DB源可以选择SQL命令或表/视图作为数据源。如果使用变量来存储SQL命令,可能需要将变量应用到OLE DB源的SQL命令中。但用户的问题是关于输出列的,所以可能需要将变量的值作为输出列传递给下游组件。 引用[3]提到输出列和外部列的元数据转换,可能涉及到数据类型的匹配。而引用[4]说明变量在SSIS中的使用,比如在数据流任务中设置变量。可能的步骤包括创建变量,在数据流任务中使用派生列转换或者脚本组件来将变量值添加到数据流中。 不过用户的问题可能更倾向于如何在OLE DB源直接使用变量作为输出列,但OLE DB源通常是从查询结果生成输出列,而不是直接使用变量。所以可能需要用其他组件,比如派生列转换,把变量值添加为输出列。 然后,我需要验证这个思路是否正确。例如,在数据流中,OLE DB源执行SQL命令,可能从变量获取SQL语句,然后结果集作为输出列。但用户想用变量值本身作为输出列,可能需要在数据流中添加一个派生列,将变量映射到新列。 另外,引用[2]提到表达式任务和变量求值,可能和设置变量表达式有关,但不确定是否直接相关。需要确保生成的输出列正确引用变量,可能需要表达式构建或者类型转换。 总结步骤:创建变量,在数据流中使用派生列转换,将变量值添加到数据流中作为新列。或者,在OLE DB源的SQL查询中引用变量,例如SELECT ?, 然后参数映射,但可能更复杂。 需要分步骤说明,确保用户能理解如何在数据流中将变量作为输出列,可能结合示例和代码片段。同时,检查是否有引用支持这些步骤,比如引用[3]提到输出列的元数据转换,所以需要确保数据类型匹配。最后,生成相关问题,帮助用户深入理解。</think>### 如何在SSIS使用OLE DB变量作为输出列 在SSIS中,将变量作为输出列需要通过数据流任务结合OLE DB源或派生列组件实现。以下是具体步骤和示例: --- #### 1. **创建变量** 首先在SSIS包中定义变量,例如: - 变量名:`UserInputValue` - 数据类型:`String`(根据需求选择类型) - 作用域:包或容器级别 --- #### 2. **配置OLE DB源** - 在数据流任务中添加 **OLE DB源**。 - 选择数据访问模式为 **SQL命令** 或 **变量中的SQL命令**(若SQL语句存储在变量中)[^1]。 - 示例:通过变量传递SQL查询: ```sql SELECT ? AS CustomColumn ``` 这里`?`是参数占位符,需通过参数映射关联变量。 --- #### 3. **参数映射(可选)** 若OLE DB源使用参数化查询: - 在OLE DB源的 **参数** 选项卡中,将`?`映射到`UserInputValue`变量。 - 设置参数类型与变量类型匹配(如`VARCHAR`对应`String`)。 --- #### 4. **添加派生列转换** 若需要直接插入变量值到数据流: - 在数据流中添加 **派生列** 组件。 - 配置新列名(如`VariableOutput`),选择变量`UserInputValue`作为表达式: ```plaintext @[User::UserInputValue] ``` - 确保数据类型与下游组件兼容[^3]。 --- #### 5. **验证输出列** - 使用 **数据查看器** 或调试模式检查输出列是否包含变量值。 - 确保输出列的元数据(如长度、类型)与目标组件(如OLE DB目标)匹配[^3]。 --- #### 示例流程 ```plaintext 控制流: 数据流任务 → 执行SQL任务(可选) 数据流: OLE DB源(参数化查询) → 派生列 → 目标组件 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值