SQLServer2008中的链接服务器
新手。温柔一点或是做父母的 我正试图为报表生成一个查询。从实例AWDATA SQL Server 2008中,我有一个链接服务器GGIAPP01,其中包含一个ACCPAC数据库 当我运行以下命令,并注释掉行时,一切都很好 当我取消注释时,我没有得到任何参数,查询运行时,BW_AK.NR_RECHNUNG、BW_AP.ID、BW_AS.POS_NR返回为NULL 此外,BW_AUFTR_KOPF是一对多BW_AUFTR_POS,BW_AUFTR_POS是一对多BW_AUFTR_STKL,但记录计数保持不变 我怀疑第一个BW连接是罪魁祸首,但我不确定如何准确地验证。如果没有强制转换,我会得到一个类型不匹配,因为IDINVC是char22,NR_RECHNUNG是int 任何反馈都将不胜感激。这是我的一个新领域 谢谢, 马特SQLServer2008中的链接服务器,sql,sql-server,ssms,sql-server-2008,Sql,Sql Server,Ssms,Sql Server 2008,新手。温柔一点或是做父母的 我正试图为报表生成一个查询。从实例AWDATA SQL Server 2008中,我有一个链接服务器GGIAPP01,其中包含一个ACCPAC数据库 当我运行以下命令,并注释掉行时,一切都很好 当我取消注释时,我没有得到任何参数,查询运行时,BW_AK.NR_RECHNUNG、BW_AP.ID、BW_AS.POS_NR返回为NULL 此外,BW_AUFTR_KOPF是一对多BW_AUFTR_POS,BW_AUFTR_POS是一对多BW_AUFTR_STKL,但记录计数
与您的问题无关,我的反馈是使用openquery。原因是,按照您使用的语法,链接服务器表中的所有记录都首先进入sql server。where子句随后被应用,听起来像是查询返回时没有错误,但是数据不是预期的那样。是这样吗?如果是这样,那么设置链接服务器似乎不是问题。如果找不到服务器或表,它会通知您。这可能是一个数据或t-sql设计问题。这有意义吗?要调试,不要同时启用所有3个联接。在BW_AK表中注释,并将其他注释忽略。在没有匹配行的情况下,空值是左连接中的预期行为,因此我认为select永远不会找到与AROBP.idivcs匹配的BW_AK.NR_RECHNUNG。尝试从AROBP中选择IDINVC,并从GGIMAIN.SYSADM.BW\u AUFTR\u KOPF中选择CASTBW_AK.NR\u RECHNUNG as varchar。对应的行看起来相同吗?还是有一些细微的差别?只是确认一下,您确定AROBP.IDINVC中的数据将与BW_AUFTR_KOPF.NR_RECHNUNG中的数据相匹配?您已经查看了这两列,并且可以看到应该匹配的行?谢谢大家。一切看起来都是协作链接,但被记录为INT类型的实际上是FLOAT类型。所以AROBP.idivc是char22,BW_AK.NR_RECHNUNG是FLOAT。指示的CAST语句有一组尾随的0。尝试各种组合,当我将转换更改为castnr_RECHNUNG作为INT作为CHAR22作为INVINTCHAR时,SELECT显示的非常可爱,但是JOIN根本不喜欢它。有没有关于解决办法的想法?
declare @FiscalPeriod integer = 03, @FiscalYear integer = 2014
select
AROBP.IDINVC, AROBP.AMTPAYMTC, AROBP.TRANSTYPE, AROBP.TRXTYPE,
AROBP.FISCPER, AROBP.FISCYR, AROBP.DATEBTCH, AROBP.IDCUST,
ARCUS.NAMECUST,
ARIBH.TEXTTRX, ARIBH.DATEINVC, ARIBH.AMTINVCTOT,
ARSAP.NAMEEMPL,
-- BW_AK.NR_RECHNUNG,
-- BW_AP.ID,
-- BW_AS.POS_NR
from GGIAPP01.GGI.dbo.AROBP AROBP
left join GGIAPP01.GGI.dbo.ARCUS ARCUS on AROBP.IDCUST = ARCUS.IDCUST
left join GGIAPP01.GGI.dbo.ARIBH ARIBH on AROBP.IDINVC = ARIBH.IDINVC
left join GGIAPP01.GGI.dbo.ARSAP ARSAP on ARCUS.CODESLSP1 = ARSAP.CODESLSP
--left join GGIMAIN.SYSADM.BW_AUFTR_KOPF BW_AK on AROBP.IDINVC = CAST(BW_AK.NR_RECHNUNG as
--varchar)
--left join GGIMAIN.SYSADM.BW_AUFTR_POS BW_AP on BW_AK.ID = BW_AP.ID
--left join GGIMAIN.SYSADM.BW_AUFTR_STKL BW_AS on BW_AP.ID = BW_AS.ID and BW_AP.POS_NR =
--BW_AS.POS_NR
where AROBP.IDINVC NOT LIKE 'PY%'
AND AROBP.FISCPER = @FiscalPeriod
AND AROBP.FISCYR = @FiscalYear
order by AROBP.IDINVC, ARSAP.NAMEEMPL, AROBP.IDCUST