Sql 对链接服务器的存储过程调用出现语法错误?

Sql 对链接服务器的存储过程调用出现语法错误?,sql,sql-server,informix,Sql,Sql Server,Informix,我有一台Informix机器,在SQL server中配置为链接服务器 我可以远程发送和接收查询结果,比如 SELECT * FROM linkedServer.instanceName.database.myTable 但是不能运行 linkedServer.instanceName.database.selectAllFromMYTABLE 存储过程 返回的错误消息是“[Informix][Informix ODBC Driver][Informix]发生语法错误”。这没有多大帮助,只是

我有一台Informix机器,在SQL server中配置为链接服务器

我可以远程发送和接收查询结果,比如

SELECT * FROM linkedServer.instanceName.database.myTable
但是不能运行

linkedServer.instanceName.database.selectAllFromMYTABLE
存储过程

返回的错误消息是“[Informix][Informix ODBC Driver][Informix]发生语法错误”。这没有多大帮助,只是它告诉我,我的请求是以某种形式收到的

有人能告诉我通过SQL Server执行Informix存储过程的正确调用语法是什么吗?我可能把存储过程调用搞砸了,因为可以在Informix服务器上验证存储过程是否正常工作

编辑:添加我正在测试的存储过程的全文,以验证我没有在Informix中做一些愚蠢的事情,这会导致SQL Server执行出现连锁反应问题:

CREATE FUNCTION sp_testSP()
   RETURNING char(20) as item_no

   DEFINE item_no char(20);

   FOREACH
    SELECT table_name.item_code
     INTO item_no
     FROM table_name
     WHERE table_name.item_code LIKE 'test%'
     RETURN item_no WITH RESUME;
   END FOREACH;
END FUNCTION

正如我所提到的,这在我连接到Informix的RazorSQL中似乎工作得很好,但看到这一点可能会让某些人的内存受到影响,这就是为什么SQL Server无法使用此返回方法的原因…

您是否尝试过使用
OpenQuery


在本机Informix中,您可以写(大约):

我不太确定实例名应该放在哪里——“linkedServer”对应一个实例名(按照我的想法)。最近的办法是:

database@linkedServer:instancename.selectAllFromMyTABLE()
instancename@linkedServer:database.selectAllFromMyTABLE()

但是,这是通过本机Informix接口实现的。如果通过SQL Server,那么语法可能需要是调用过程的本机SQL Server语法。理论上,我相信,所使用的API(ODBC或其他什么)应该能够转换为本机Informix语法。

看起来很有希望,但读了这篇文章后我发现:“OPENQUERY不能用于在链接服务器上执行扩展存储过程。”嗯。。。我已让openquery请求执行存储过程,但它会收到与其他方法相同的语法错误消息。
select*from openquery([linkedServer],“execute function instancename:sp_testSP()”)
。括号和所有内容。昨天某个时候,我收到一个错误,即链接服务器连接中的行
linkedServer.instanceName.database.selectAllFromMYTABLE
“远程过程调用”未启用,因此我假设该行调用存储过程失败。我的主要困惑源于,既然我已经在SQLServer链接的服务器对象上启用了RPC,那么当直接从Informix连接执行存储过程时,存储过程不包含这样的错误时,为什么它现在会由于这个语法错误而失败。
database@linkedServer:instancename.selectAllFromMyTABLE()
instancename@linkedServer:database.selectAllFromMyTABLE()