【问题标题】:SSIS Script Component convert Object type variable to Int VariableSSIS 脚本组件将 Object 类型变量转换为 Int 变量
【发布时间】: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


【解决方案1】:

这是您需要的步骤:

  1. 准备一个 OleDb 连接到您打算从中查询 MAX(id) 的数据库。

  2. 声明一个 Int32 类型的变量 MaxUID(如果需要,也可以是 Int64)

  3. 将“执行 SQL 任务”添加到您的包中。

  4. 像这样配置您的“执行 SQL 任务”:

    “常规”选项卡
    结果集 = "单行"
    SourceType = "直接输入"
    SQL 语句 = SELECT max(Id)+1 FROM your_table_name AS [MaxUID]
    “结果集” 选项卡
    结果名称 = MaxUID
    变量姓名 = User::MaxUID

现在您有了一个整数类型的变量,可以在脚本任务中使用。


旁注:如果您只使用此脚本任务来增加 MaxUID 值,那么表达式任务会容易得多吗?

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2017-07-05
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多