将子查询传递到带有AS400链接服务器的OpenQuery中

问题描述 投票:0回答:1

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

我有一个需要的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-server ssms ibm-midrange linked-server openquery
1个回答
0
投票

据我所知,你不知道...

两个选项..

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

取决于返回的记录数,尝试使用选项#2可能会遇到语句大小问题。用于IBM i的Db2支持最大2,097,152字节的SQL语句...

© www.soinside.com 2019 - 2024. All rights reserved.