【问题标题】:In SSIS how do I access the result of running an OLE DB Command?在 SSIS 中如何访问运行 OLE DB 命令的结果?
【发布时间】:2013-03-11 17:06:30
【问题描述】:

我在 Visual Studio 2010 中使用 SSIS。我的包如下所示: OLE DB 源 -> 多播 -> 7 个 OLE DB 命令

上述七个 OLE DB 命令中的第六个包含:

SELECT r.DeviceID 
FROM   hub.ResolveDeviceInstanceToDevice r 
WHERE  r.DeviceInstanceID = ?
       AND r.DatasetID = ?

我希望在第七个 OLE DB 命令中使用返回的 DeviceID。我可以这样做吗?如何?如果不是,我该怎么做?

我已将所有 7 个 OLE DB 命令放在一个多播之下,因为其中有几个使用来自 OLE DB 源的相同输出。

我选择不为此使用存储过程,因为人们倾向于通过 ETL 执行此操作。但如果这太复杂,我会考虑转移到存储过程。

【问题讨论】:

  • 只是为了确认一下,以上都运行正常,但是我看不到如何访问 select 命令的结果。

标签: database ssis command etl ole


【解决方案1】:

我知道这是一个老问题,但我在搜索类似问题时遇到了它。对于您像 Kyle 回答的那样给出的语句,查找可能是一个更好的解决方案,但是您可以通过向 SQL 语句添加参数来完成您的要求。

SELECT ?=r.DeviceID 
FROM   hub.ResolveDeviceInstanceToDevice r 
WHERE  r.DeviceInstanceID = ?
   AND r.DatasetID = ?

所以第一个问号将是 param0,将是查询的结果列/字段。

【讨论】:

    【解决方案2】:

    您不应该使用 OLE DB 命令来执行此操作。相反,您应该使用 Lookup 任务来实现这一点。

    1. 设置 Lookup 与运行命令所针对的数据库的连接。
    2. 将其查询设置为

      选择 r.DeviceID、r.DeviceInstanceID、r.DataSetID FROM hub.ResolveDeviceInstanceToDevice r

    3. 在列中,将源的 DeviceInstanceID 和 DataSetID 输入连接到相应的查找列。

    4. 将 DeviceID 添加为输出列。

    现在您可以在另一个 OLE DB 命令中使用此值。

    【讨论】:

      【解决方案3】:

      我认为select 不可能。有一个存储过程,你可以这样做

      exec ? = GetDeviceId ?, ?

      【讨论】:

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