2

我在 Visual Studio 2010 中使用 SSIS。我的包看起来像:OLE DB Source -> Multicast -> 7 OLE DB Command's

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

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

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

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

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

4

3 回答 3

4

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

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

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

于 2015-06-23T17:20:53.267 回答
2

您不应该使用 OLE DB 命令来执行此操作。相反,您应该使用查找任务来实现此目的。

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

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

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

  4. 将 DeviceID 添加为输出列。

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

于 2013-03-12T18:27:45.893 回答
1

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

exec ? = GetDeviceId ?, ?

于 2013-03-12T12:31:54.943 回答