IBM i (AS400) 到 SQL 服务器 table 连接语法
IBM i (AS400) to SQL Server table join syntax
我正在使用 Excel 连接通过 SQL 服务器连接从 DB2 for IBM i (AS400) 查询客户合同并尝试加入 SQL 服务器 table确定合同到期日期和销售团队责任。
AS400 查询运行,但我在加入 SQL 服务器 table ACCOUNT.dbo.CUSTOMER
时继续收到错误,但在加入时找不到对替代语法的引用。
[select *
from openquery(
bpcsrpt_new,'
select s.SCID, s.SVER, s.CONTEXP, a.ACCTNAME, a.SALESTEAM
from AS400table1.contract c, AS400table1.subcontract s, ACCOUNT.dbo.CUSTOMER a
where c.cid=''Active''
and c.cid=s.scid
and c.cver=s.sver
and c.cid=a.acid')]
那是行不通的。当您使用 openquery 时,语句会发送到远程机器。显然,ACCOUNT.dbo.CUSTOMER 不在远程 IBM i(aka AS400)机器上。
您可以直接在查询中使用 4 部分命名
select s.SCID, s.SVER, s.CONTEXP, a.ACCTNAME, a.SALESTEAM
from IBMILNKNAM.IBMIDBNAM.IBMILIBNAM.contract c
, IBMILNKNAM.IBMIDBNAM.IBMILIBNAM.subcontract s
, ACCOUNT.dbo.CUSTOMER a
where c.cid='Active'
and c.cid=s.scid
and c.cver=s.sver
and c.cid=a.acid
但是请注意,SQL 服务器将撤回完整的合同并分包 table 以在本地进行连接。
如果您只对 IBM i 上大型 table 的几行感兴趣,Openquery 是更好的选择。如果我没记错的话,是这样的:(未测试)
select *
from (select * from Openquery(IBMIKNKNAM, 'select s.SCID, s.SVER, s.CONTEXP
from contract c
join subcontract s
on c.cid=s.scid
and c.cver=s.sver
where c.cid=''Active'')) as rmt
join ACCOUNT.dbo.CUSTOMER a on a.acid = rmt.cid
我正在使用 Excel 连接通过 SQL 服务器连接从 DB2 for IBM i (AS400) 查询客户合同并尝试加入 SQL 服务器 table确定合同到期日期和销售团队责任。
AS400 查询运行,但我在加入 SQL 服务器 table ACCOUNT.dbo.CUSTOMER
时继续收到错误,但在加入时找不到对替代语法的引用。
[select *
from openquery(
bpcsrpt_new,'
select s.SCID, s.SVER, s.CONTEXP, a.ACCTNAME, a.SALESTEAM
from AS400table1.contract c, AS400table1.subcontract s, ACCOUNT.dbo.CUSTOMER a
where c.cid=''Active''
and c.cid=s.scid
and c.cver=s.sver
and c.cid=a.acid')]
那是行不通的。当您使用 openquery 时,语句会发送到远程机器。显然,ACCOUNT.dbo.CUSTOMER 不在远程 IBM i(aka AS400)机器上。
您可以直接在查询中使用 4 部分命名
select s.SCID, s.SVER, s.CONTEXP, a.ACCTNAME, a.SALESTEAM
from IBMILNKNAM.IBMIDBNAM.IBMILIBNAM.contract c
, IBMILNKNAM.IBMIDBNAM.IBMILIBNAM.subcontract s
, ACCOUNT.dbo.CUSTOMER a
where c.cid='Active'
and c.cid=s.scid
and c.cver=s.sver
and c.cid=a.acid
但是请注意,SQL 服务器将撤回完整的合同并分包 table 以在本地进行连接。
如果您只对 IBM i 上大型 table 的几行感兴趣,Openquery 是更好的选择。如果我没记错的话,是这样的:(未测试)
select *
from (select * from Openquery(IBMIKNKNAM, 'select s.SCID, s.SVER, s.CONTEXP
from contract c
join subcontract s
on c.cid=s.scid
and c.cver=s.sver
where c.cid=''Active'')) as rmt
join ACCOUNT.dbo.CUSTOMER a on a.acid = rmt.cid