无法在链接服务器上运行 openquery
Posted
技术标签:
【中文标题】无法在链接服务器上运行 openquery【英文标题】:Cannot run openquery on linked server 【发布时间】:2017-10-13 05:49:57 【问题描述】:我正在链接服务器 (IBM DB2) 上运行查询,这样做的原因是执行简单查询需要花费大量时间。 下面是两个查询,第一个运行成功,所以问题不在于查询
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''')
以及我在运行打开查询时遇到的错误
链接服务器“AS400TS_LNK”的 OLE DB 提供程序“DB2OLEDB”返回消息“令牌 *N 无效。有效令牌:*N。SQLSTATE:42601,SQLCODE:-104”。
消息 7321,第 16 级,状态 2,第 1 行
准备查询“select * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT where actrno = '8971'”以针对链接服务器“AS400TS_LNK”的 OLE DB 提供程序“DB2OLEDB”执行时出错。
【问题讨论】:
这里只是一个疯狂的猜测,但很容易测试。尝试从openquery
语句中删除方括号...
正如@user1429080 提到的,使用方括号来引用标识符是SQL Server 的事情;将标准 SQL 发送到远程服务器,必要时使用双引号作为标识符(无论如何这里不是这种情况)。
【参考方案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'
【讨论】:
以上是关于无法在链接服务器上运行 openquery的主要内容,如果未能解决你的问题,请参考以下文章
消息 7391:链接服务器无法开始分布式事务(两个 svrs 在本地运行)
使用 OPENQUERY 语法通过链接服务器 (SQL Server 2005) 调用 MySQL 存储过程(带参数)的问题