首页 > 解决方案 > 使用 AS400 链接服务器将子查询传递到 OpenQuery

问题描述

我在这里有一个到 AS400 的链接服务器。我正在尝试从一个字段中提取数据,但是当我只需要大约 20k 时,它会提取超过一百万条记录。

我有一个我需要的 ID 列表,我正在尝试弄清楚如何将该列表传递给 OpenQuery。

这是我的 OpenQuery:

SELECT * FROM OPENQUERY(AS400, '
    SELECT 
        IMITNO, IMITD1, IMITD2, IMMFNO, IMBMTP, IMDSCO 
      FROM AS400.APLUS2FLE.ITMST 
      WHERE IMDSCO != ''Y''
')

我想添加WHERE IMITNO IN (SELECT item_id FROM as400_item_scope),但 as400_item_scope 表在 SQL 机器上,而不是在 AS400 上。我看了几个例子,我可以传入一个变量,但我不明白如何传入这样的列表/查询。

我正在使用最新的 SSMS,但 SQL Server 版本是 2008

标签: sql-serverssmsibm-midrangelinked-serveropenquery

解决方案


据我所知,你不能...

两种选择。。

  1. 将结果插入SELECT item_id FROM as400_item_scope到 IBM i 上的(临时?)表中,然后在您的 openquery 中引用该表。
  2. 使用 from 结果构建一个逗号分隔的字符串,SELECT item_id FROM as400_item_scope并将其包含在您的 openquery 字符串中。

根据返回的记录数,您可能会在尝试使用选项 #2 时遇到语句大小问题。Db2 for IBM i 支持最多 2,097,152 字节的 SQL 语句...


推荐阅读