2017-10-13 106 views
0

我正在链接服务器(IBM DB2)上运行查询,我这样做的原因是因为执行简单查询需要很长时间。下面 是两个查询,第一个成功地运行,因此,问题不是与查询无法在链接的服务器上运行openquery

select top 10 * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT where actrno = '8971' 

    select * from openquery(AS400TS_LNK, 'select * from [TEST].[AUPRDDBF].CONTACCT where actrno = ''8971''') 

和错误,我得到在运行打开查询

OLE DB提供程序“DB2OLEDB”为链接服务器“AS400TS_LNK”返回消息“令牌* N无效。有效令牌:* N。SQLSTATE:42601,SQLCODE:-104”。

消息7321,级别16,状态2,行1

发生错误,同时准备查询 “SELECT * FROM [AS400TS_LNK]。[测试]。[AUPRDDBF] .CONTACCT其中actrno = '8971'”针对链接服务器“AS400TS_LNK”的OLE DB提供程序“DB2OLEDB”执行。

+1

只是胡乱猜测这里,但很容易测试。尝试从'openquery'语句中删除方括号... – user1429080

+0

正如@ user1429080所提到的,使用方括号来引用标识符是SQL Server的一件事;发送标准SQL到远程服务器,必要时使用双引号标识(这里不是这种情况)。 – mustaccio

回答

1

试试这个:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT where actrno = ''8971''') 

或者,做不到这一点,试试这个:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT') 
where actrno = '8971' 
+0

非常感谢,工作!并且查询的执行时间也很短。 – user2802027

相关问题