【发布时间】:2022-01-02 16:38:58
【问题描述】:
我需要将数据从 ODBC 源加载到 OLEDB 目标。 OLEDB 目标表不包含 Identity 列,但它确实有一个主键列,其中必须插入类似于 Identity 列的值(将其增加 1)。
我已查询目标表(OLEDB 源)并检索了 max(Id) 并分配给 Object 类型的 SSIS 变量,并使用数据流中的脚本组件逐行获取 max(Id)+1 值。
将 Object 类型变量转换为 Integer 类型时,出现错误
无法将“System.__ComObject”类型的 COM 对象转换为接口类型“System.IConvertible”。此操作失败,因为 IID 为“{805E3B62-B5E9-393D-8941-377D8BF4556B}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
无法更改目标表中的列。
MaxUID = 对象变量
RowNumber = 输出变量
脚本组件代码
int i = 1;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.RowNumber = Convert.ToInt32(this.Variables.MaxUID) + 1;
i = i + 1;
}
【问题讨论】:
-
为什么不简单地使用
Int类型的变量? -
它是一个 DB2 Ole db 源,无法使用 Execute-T-SQL 任务连接目前我正在使用第三方工具 Kingsway Soft 连接到目标以检索 max(Id) 值并使用RecordSet 组件将其存储在 ObjectType 变量中。 Recordset 只允许 Object 类型的变量用于动态存储值。
-
您应该能够存储此 ODBC 查询的标量整数值,而不是结果记录集。
-
您能否建议我如何实现这一目标。
-
How to set a variable using a scalar-valued tSQL function in SSIS SQL Task 展示了如何做到这一点。使用当前版本(SQL 2019),甚至可以使用列名而不是列索引,如上述答案所示。
标签: c# ssis script-component dataflowtask