Sql server IBM i(AS400)到SQL Server表联接语法
我使用Excel连接通过SQL Server连接从DB2 for IBM I(AS400)查询客户合同,并尝试加入SQL Server表以确定合同到期日期和销售团队责任 AS400查询运行,但在加入SQL Server表Sql server IBM i(AS400)到SQL Server表联接语法,sql-server,join,ibm-midrange,Sql Server,Join,Ibm Midrange,我使用Excel连接通过SQL Server连接从DB2 for IBM I(AS400)查询客户合同,并尝试加入SQL Server表以确定合同到期日期和销售团队责任 AS400查询运行,但在加入SQL Server表ACCOUNT.dbo.CUSTOMER时,我仍然收到一个错误,但在加入时找不到替代语法的引用 [select * from openquery( bpcsrpt_new,' select s.SCID, s.SVER, s.CONTEXP, a.ACCTNAME, a.SAL
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不在远程IBMi(又名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 Server将收回完整的合同和分包合同表,以便在本地进行连接
如果您只对IBMi上大表的几行感兴趣,那么Openquery是一个更好的选择。如果我没记错的话,大概是这样的:(未测试)
谢谢你,查尔斯。你的第二个选择非常有效。很高兴听到……意味着我的记忆还没有完全消失!还有一件事要补充…注意,在第二个示例中,我使用的是显式连接,而不是示例中的隐式连接。最佳做法是在
FROM
中使用带有连接条件的显式连接,而不是在中使用带有连接条件的隐式连接,其中
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